He insertado dos registros en una tabla.
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Cuando los consulto, todos se muestran como 23
. Significa que SQL Server ignora los ceros iniciales. ¿Cuál es el mecanismo detrás de eso? ¿Cómo puedo hacer que SQL Server devuelva los valores cuando los inserté (es decir, 0023
y 23
)?
sql-server
sql-server-2008
user8365
fuente
fuente
id
deberían ser de tipoVARCHAR
o similar.Respuestas:
0023
No es un número. Es una cuerda.23
es el numero SQL Server puede reconocer que esos ceros adicionales no son necesarios para definir el número, por lo que los ignora. Si desea mostrar un valor como 0023 para la aplicación, le sugiero que realice el formateo en el lado de la aplicación. De esa forma, el número almacenado en SQL Server sigue siendo un número si desea realizar sumas, agregaciones u otros cálculos. Si realmente tiene que almacenarlo como '0023
', debe convertirlo en un campo de caracteres; char, varchar, nvarchar, nchar.fuente
id
comoVARCHAR
o simplemente inserte 23 en lugar de 00230023
es una cadena, almacénela como una cadena. Si no es así, guárdelo como un INT y olvídese de los ceros iniciales.Ya se dijo en otras respuestas que
00023
es un número; Solo quiero agregar que puede usar columnas calculadas para mostrar ese número usando un formato personalizado. Por ejemplo,fuente
0023 es un número, pero los tipos de datos int y otros tipos de números no almacenan ceros a la izquierda ya que no hay una razón matemática para hacerlo.
Si necesita almacenar ceros a la izquierda, use un tipo de datos de cadena como, char, varchar, etc.
fuente
INT
es de longitud fija (como 32 bits) y se usa notación binaria para almacenarlos, los ceros iniciales se almacenan. Pero no se muestran en la salida.15
--esto sólo toma un dígito hexadecimal,F
. Ya tienen un número diferente de "ceros iniciales". 2147483647 son 10 dígitos, pero en hexadecimal son solo 7FFFFFFF u 8 dígitos.