Сообщение об ошибке преобразования T-SQL не удалось - PullRequest
1 голос
/ 21 октября 2011

Я получаю следующую ошибку:

Conversion failed when converting the varchar value '2010-01-10' to data type int.

При выполнении следующей команды в окне запроса в Management Studio:

SELECT * FROM (
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
) AS X
WHERE qqq = CAST(14290 AS INT)

Однако, когда я запускаю только эту часть запроса, я получаю результаты без ошибок:

SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items

Аналогично со следующим:

SELECT * FROM (
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items
) AS X

Что происходит, и как я могу использовать мое предложение where без сообщения об ошибке?

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Таблица, являющаяся исходными данными для представления, скорее всего, имеет значение '2010-01-10' в столбце group_id, и это исключается фильтром в самом представлении.

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

Попробуйте

SELECT *
FROM   (SELECT CAST(CASE
                      WHEN group_id NOT LIKE '%[^0-9]%' THEN group_id
                    END AS INT) AS qqq
        FROM   view_jct_snapshot_group_items) AS X
WHERE  qqq = 14290  
0 голосов
/ 21 октября 2011
SELECT CAST(group_id AS INT) AS qqq from view_jct_snapshot_group_items 

Это должно быть в состоянии привести все значения в представлении к int.Ясно, что хотя бы одно из значений не является целым числом.Попробуйте поместить предложение WHERE в производную таблицу, а не за ее пределы.

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

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