Я вставил две записи в таблицу.
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Когда я запрашиваю их, они все отображаются как 23
. Это означает, что SQL Server игнорирует ведущие нули. Какой механизм стоит за этим? Как я могу заставить SQL Server возвращать значения, когда я их вставил (то есть 0023
и 23
)?
sql-server
sql-server-2008
user8365
источник
источник
id
должны быть типаVARCHAR
или аналогичными.Ответы:
0023
это не число. Это строка.23
это номер. SQL Server может распознать, что эти дополнительные нули не нужны для определения числа, поэтому он игнорирует их. Если вы хотите отобразить в приложении значение как 0023, я бы предложил выполнить форматирование на стороне приложения. Таким образом, число, хранящееся в SQL Server, остается числом, если вы хотите выполнить сложение, агрегирование или другие вычисления. Если вам действительно нужно сохранить его как '0023
', вам нужно преобразовать его в символьное поле; чар, варчар, нварчар, нчар.источник
id
как,VARCHAR
либо просто вставьте 23 вместо 00230023
это строка, то сохраните ее как строку. Если это не так, сохраните его как INT и забудьте о ведущих нулях.В других ответах уже говорилось, что
00023
это число; Я просто хочу добавить, что вы можете использовать вычисляемые столбцы, чтобы показать это число в произвольном формате. Например,источник
0023 - это число, но типы данных int и другие числа не хранят начальные нули, поскольку для этого нет математической причины.
Если вам нужно хранить начальные нули, используйте строковый тип данных, например, char, varchar и т. Д.
источник
INT
это фиксированная длина (например, 32 бита) и двоичная запись используется для их хранения, тогда начальные нули действительно сохраняются. Но они не отображаются в выводе.15
--this занимает одну цифру в шестнадцатиричноеF
. У них уже есть другое количество «ведущих нулей». 2147483647 - это 10 цифр, но в шестнадцатеричном формате это только 7FFFFFFF или 8 цифр.