Я попытался разрешить ошибку для кода ниже, но не знаю, как это сделать.Ошибка: преобразование не удалось при преобразовании даты и/или времени из символьной строки (происходит внутри в предложении where)
В том месте, где я проверил строки concat, которые возвращают дату в строковых форматах, но ошибка происходит где-то в преобразовании.
Может кто-нибудь, пожалуйста, дайте мне знать, где и как решить эту проблему.
Подсказка: ERSConstructedVariable_ExecutionDate
- datetime
Тип данных в таблице.
@OutputTimeDimensionvalue
= '1989 - 1998'
Код:
SELECT
Column1, column2, column3
FROM
Table1 CV
WHERE
CV.ERSConstructedVariable_ExecutionDate
BETWEEN CONVERT(datetime2, CONCAT(substring(@OutputTimeDimensionvalue, 1, 4), '-01', '-01'))
AND CONVERT(datetime2,CONCAT((substring (@OutputTimeDimensionvalue, 7, 4)), '-01', '-01'))
Никогда не используйте 'CONVERT' против даты без номера преобразования. См. Здесь: https://msdn.microsoft.com/en-us/library/ms187928.aspx выберите правильный формат и используйте его. Если вы удаляете разделители '-' в целом, вы можете использовать формат 112. Обратите внимание, что' datetime2' также имеет компонент времени. Возможно, тип данных «дата» будет лучше? –
@ Nick.McDermaid. , , Хотя я согласен с тем, что номера конверсий являются хорошей идеей, SQL Server имеет встроенные форматы, которые легко конвертируются * независимо от других настроек *. Таким образом, стандартные форматы ANSI, такие как YYYYMMDD (и почти при всех обстоятельствах YYYY-MM-DD), легко поддерживаются, как и YYYY-MM-DDTHH: MM: SS. –