2010-01-16 9 views
17

Recuerdo leer sobre citar cosas al hacer una consulta SQL y que cuando citas algo, se convierte en una cadena. También leí que los números no deberían citarse. Ahora, no puedo encontrar esa cita y necesito actualizar mi memoria para ver si debo citar los números.¿Debo citar números en SQL?

+3

Depende de cómo se almacena el valor en el db. Si está almacenado como texto, cítelo, si está almacenado como un número, no lo haga :-) – bernie

+1

No es un número, es un código. Como un ID de producto o similar. Un número es algo que usas para el cálculo. No se debe citar un número, ya que un número nunca se debe almacenar en la base de datos como una cadena. –

+0

@Someone ¿tiene una fuente para su definición de que una ID compuesta de dígitos numéricos no es un número y, por lo tanto, debe citarse? ¿Y qué ocurre si se trata de una identificación que corresponde a las filas de una tabla como 1 para row1 e.t.c? – barlop

Respuesta

12

No debe citar los números.

Estás en lo correcto al recordar que lo convierte en una cadena.

SELECT 10 AS x 

es perfectamente legal y volverá (en la mayoría de los motores de base de datos) de una columna de tipo de datos int (o una variación del mismo.)

noto el comentario a la pregunta de Adam, y me gustaría para hacer un comentario sobre eso, pero editaré esta respuesta porque creo que es un punto importante.

citar "números" en SQL generalmente se realiza cuando no es realmente un número , pero en lugar de un código.

Por un número me refiero a algo que puede contar, sumar, calcular con, un código es un identificador.

Así que un SSN es un código, es tu código único (lo sé, la N significa "número", un poco inapropiado si me preguntas), pero no tratarías de calcular el promedio de todas las SSN en la base de datos.

Si almacena ID de productos en la base de datos como cadenas, pero en realidad solo están formados por dígitos, entonces son códigos, no números.

Los códigos deben ser citados, los números no deberían ser.

1

No sé lo que puede haber leído, pero no cite los números.

6

He aquí un ejemplo, donde se cita produciría resultados inconsistentes (en MySQL):

select 1 < 1.0;  // returns 0 

select '1' < '1.0'; // returns 1 

Esto se debe a la segunda comparación se realiza utilizando la ordenación de cadenas actual en lugar de numéricamente.

Es mejor no citar los números, ya que sería simplemente un paso innecesario adicional para la base de datos convertir el literal de la cadena en un valor numérico para la comparación y podría alterar el significado de las comparaciones.

0

eh ... no, ¿no debería?

supongo que te refieres citando encerrando en 'like 'this'

INSERT INTO table (foo) VALUES (999); es perfectamente legal siempre y cuando foo es un tipo collumn INT INSERT INTO table (foo) VALUES('foo'); Inserta la cadena foo en la tabla. No puede hacer esto en tablas de tipo INT, por supuesto.

1

Obviamente, no se olvide de comprobar para asegurarse de que el valor que haya pasado sea realmente un número.

0

Bueno, a riesgo de encender una llama, ¿puedo discrepar un poco aquí de que NUNCA está bien usar comillas simples alrededor de un valor numérico?Me parece que A VECES tiene sentido usar comillas simples alrededor de un valor numérico. Si col1 es una columna INT, entonces (usando VBScript como un ejemplo)

sql = "INSERT " & foo & " INTO col1 WHERE ID = 1" 

y

sql = "INSERT '" & foo & "' INTO col1 WHERE ID = 1" 

los dos para, cuando se ejecuta SQL, inserte cualquier valor entero de foo correctamente. Pero, ¿qué ocurre si desea insertar 0 cuando Foo no está inicializado? Usar una expresión numérica entrecomillada como esta previene un error y maneja el caso nulo. Si crees que esto es una buena práctica o no, es cierto.

Cuestiones relacionadas