2010-01-16 2 views
17

Я помню, как читал о цитировании материала при выполнении SQL-запроса, и когда вы цитируете что-то, он становится строкой. Я также читал, что цифры не следует указывать. Теперь я не могу найти эту цитату, и мне нужно обновить мою память, чтобы посмотреть, следует ли цитировать числа.Должен ли я цитировать числа в SQL?

+3

Зависит от того, как значение хранится в db. Если он хранится в виде текста, цитируйте его, если он хранится в виде числа: 0) – bernie

+1

Это не номер, это код. Как идентификатор продукта или аналогичный. Число, которое вы используете для расчета. Номер не должен указываться, поскольку номер никогда не должен храниться в базе данных в виде строки. –

+0

@ У вас есть источник для вашего определения, что идентификатор, состоящий из числовых цифр, не является числом и поэтому должен быть указан? И что, если это идентификатор, который соответствует строкам в таблице, подобной 1 для row1 e.t.c? – barlop

ответ

12

Вы не должны указывать числа.

Вы правы, помня, что это делает его строкой.

SELECT 10 AS x 

совершенно законно и будет возвращать (в большинстве СУБД) столбец типа данных Int (или его вариант.)

Я заметил комментарий на ваш вопрос Адам, и я хотел бы чтобы сделать комментарий к этому, но я отредактирую этот ответ, потому что я думаю, что это важный момент.

со ссылкой на «номера» в SQL обычно делается, когда это на самом деле не номер, но вместо код.

От номер Я имею в виду что-то, что вы можете подсчитать, рассчитать, код является идентификатором.

Итак, SSN - это код, это ваш уникальный код (я знаю, что N означает «число», бит неправильного значения, если вы спросите меня), но вы не попытались бы вычислить среднее значение всех SSN в базе данных.

Если вы храните идентификаторы продуктов в базе данных в виде строк, но на самом деле они состоят только из цифр, то это коды, а не числа.

Коды следует указывать, номера не должны.

1

Я не знаю, что вы, возможно, читали, но не указываете числа.

6

Ниже приведен пример, в котором со ссылкой бы привести к непредсказуемым результатам (в MySQL):

select 1 < 1.0;  // returns 0 

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

Это потому, что второе сравнение выполняется с использованием текущей строки сортировки, а не численно.

Лучше не цитировать числа, так как это просто лишний шаг для базы данных, чтобы преобразовать строковый литерал в числовое значение для сравнения и изменить значение сравнения.

0

э-э ... нет, не стоит?

Я предполагаю, что вы имеете в виду, процитировав ограждающих в 'like 'this'

INSERT INTO table (foo) VALUES (999); совершенно законно, пока Foo является тип collumn INT INSERT INTO table (foo) VALUES('foo'); Вставки строка Foo в таблицу. Конечно, вы не можете делать это на таблицах типов INT.

1

Очевидно, что не забудьте проверить, чтобы удостовериться, что любое значение, которое вы передали, действительно является числом.

0

Ну, с риском воспламенения пламени, могу ли я почтительно не согласиться здесь, что НИКОГДА не использовать одиночные кавычки вокруг числового значения?Мне кажется, что SOMETIMES имеет смысл использовать одинарные кавычки вокруг числового значения. Если col1 является столбцом INT, а затем (с помощью VBScript в качестве примера)

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

и

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

будет ОБА, когда выполняется SQL, вставить любое целое значение Foo правильно. Но что, если вы хотите, чтобы 0 был вставлен, когда foo не инициализирован? Использование цитированного числового выражения, подобного этому, предотвращает ошибку и обрабатывает нулевой случай. Считаете ли вы, что это хорошая практика, это, безусловно, так.

Смежные вопросы