Подтвердить что ты не робот

Должен ли я цитировать номера в SQL?

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

4b9b3361

Ответ 1

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

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

SELECT 10 AS x

является совершенно законным и вернет (в большинстве движков базы данных) столбец типа данных int (или его вариант).

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

Цитирование "чисел" в SQL обычно выполняется, когда это не действительно число, а вместо этого код.

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

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

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

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

Ответ 2

Вот пример, где цитирование приведет к несогласованным результатам (в MySQL):

select 1 < 1.0;      // returns 0

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

а... нет, не стоит?

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

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

Ответ 6

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

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

и

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

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