не звучит правильно для SQL Server.

я проблема с некоторыми запросами к серверу SQL. Оказывается, у меня есть таблица с полями «Attibute_Name» и «Attibute_Value», которые могут быть любого типа, хранящиеся в varchar. (Да, знаю.)

Все даты для определенного атрибута, похоже, хранятся в формате «ГГГГ-ММ-ДД чч: мм: сс» (в этом нет уверенности на 100%, здесь миллионы записей), поэтому я могу выполнить этот код без проблем. :

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'

Однако, если я выполню следующий код:

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()

Я получу следующую ошибку:Ошибка преобразования при преобразовании даты и / или времени из строки символов.

Почему это происходит в предложении where, а не в выбранном?

Еще одна подсказка:

Если вместо фильтрации по Attribute_Name я использую фактический Attribute_ID, хранящийся в базе данных (PK), он будет работать без проблем.

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_ID = 15
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()

Обновить Спасибо всем за ответы. Мне было трудно действительно выбрать правильный ответ, потому что все указали на то, что было полезно для понимания проблемы. Это было определенно связано с порядком исполнения. Оказывается, мой первый запрос работал правильно, потому что сначала было выполнено предложение WHERE, а затем SELECT. Мой второй запрос не прошел по той же причине (поскольку атрибуты не были отфильтрованы, преобразование не выполнено при выполнении того же предложения WHERE). Мой третий запрос работал, потому что идентификатор был частью индекса (PK), поэтому он имел приоритет и сначала детализировал результаты по этому условию.

Спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос