SQL-запрос с полями типа NUMERIC - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть такая таблица

CREATE TABLE MyTable (
    [MyTableID] [int] NOT NULL,
    [Description] [varchar](50) NOT NULL,
    CONSTRAINT [PK_AddressType] PRIMARY KEY CLUSTERED (
        [MyTableID] ASC
    )
) ON [PRIMARY]

Может кто-нибудь объяснить, почему следующий запрос работает, даже если я включаю значение поля в одинарные кавычки?

SELECT *
FROM MyTable
WHERE MyTableID = '1'

Этоособенность SQL Server?Это ANSI / SQL?

Ответы [ 2 ]

6 голосов
/ 09 декабря 2010

То, что вы продемонстрировали, обычно называется неявным преобразованием данных - данные автоматически преобразуются в тип данных сравниваемого столбца. Поскольку строку со значением «1» можно преобразовать в числовой тип данных со значением 1, все работает просто отлично. Неявные преобразования типов данных могут происходить в соответствии с списком приоритетов здесь.

Явное преобразование данных - это когда вы используете такие функции, как CAST или CONVERT .

Строка в цифру (и наоборот) поддерживается во всех известных мне базах данных - SQL Server, Oracle, MySQL, PostgreSQL ... Функция CAST - это ANSI, IIRC. Другие типы данных не так гибки - например, даты и время.

3 голосов
/ 09 декабря 2010

В дополнение к ответу OMG Ponies.

Неявное преобразование типов данных может происходить в соответствии с списком приоритетов здесь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...