SQL как функция сломана? или ограниченный?
Я пытаюсь использовать LIKE
функция для получения данных с похожими именами. Все выглядит хорошо, но в данных, которые я получаю взамен, отсутствуют некоторые значения, когда я получаю более ~20 строк данных.
У меня очень простой запрос. Мне просто нужны данные, которые начинаются с Lab, в идеале на весь день или хотя бы на 12 часов. Приведенный ниже код пропускает некоторые данные, и я не могу разглядеть шаблон, который он пропускает.
SELECT History.TagName, DateTime, Value FROM History
WHERE History.TagName like ('Lab%')
AND Quality = 0
AND wwRetrievalMode = 'Full'
AND DateTime >= '20150811 6:00'
AND DateTime <= '20150811 18:00'
Чтобы дать вам представление о данных, которые я извлекаю, у меня есть Lab.Raw.NTU, Lab.Raw.Alk, Lab.Sett.NTU и т. Д. Большинство данных должны иметь значения в 6 утра / мин., 10 утра / мин., и 2 часа ночи / вечера. У некоторых больше, у немногих меньше, не важно. Когда я изменяю запрос на более конкретный (т. Е. Только на 1 час или LIKE "Lab.Raw.NTU"), я получаю все свои данные. В настоящее время эти данные будут показаны для всех тегов, и я получу данные как за 6 утра, так и за 6 вечера, но некоторые значения будут отсутствовать, такие как Lab.Raw.NTU в 6 вечера. Кажется, что есть другие данные, которые отсутствуют, если я изменю окно на предыдущий день или ночную смену, поэтому я не думаю, что это должно быть с самими данными. Что-то странное происходит с функцией LIKE, но я понятия не имею, что.
Есть ли другой способ получить теги, которые я хочу, кроме как? Таких как Tagname > Lab и Tagname <= Labz? (это дает мне ошибку, поэтому я думаю, что нет)
Пожалуйста помоги.
1 ответ
Похоже, что вы используете Like
оператор правильно; это может быть красная сельдь. Проверьте тип данных DateTime
поле. Если он основан на символах, таких как varchar, вы выполняете сравнение строк вместо сравнения дат, что может привести к неожиданным результатам. Попробуйте выполнить явное приведение, чтобы убедиться, что они сравниваются как даты:
DateTime >= convert(datetime, '20150811 6:00')