Я помню, как читал о цитировании материала при выполнении SQL-запроса, и когда вы цитируете что-то, он становится строкой. Я также читал, что цифры не следует указывать. Теперь я не могу найти эту цитату, и мне нужно обновить мою память, чтобы увидеть, следует ли цитировать числа.
Должен ли я цитировать номера в SQL?
Ответ 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 не инициализирован? Использование цитированного числового выражения, подобного этому, предотвращает ошибку и обрабатывает нулевой случай. Независимо от того, считаете ли вы, что это хорошая практика, это, безусловно, так.