Ошибка преобразования при преобразовании даты и / или времени из строки символов с полем varchar в качестве даты - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь преобразовать запрос MySQL в SQL Server, и это насколько я получил. Похоже, что SQL Server недоволен тем, что в таблице хранится DATE (в данном случае duedate) как VARCHAR. Имея это в виду, я попытался преобразовать их, используя CONVERT (DATE, EXPRESSION). К сожалению, я получаю сообщение об ошибке «Ошибка при преобразовании даты и / или времени из строки символов». Я не уверен, как еще попытаться преобразование.

SELECT MYSQL_locationstesting.*, MYSQL_locations.sitenumb

FROM MYSQL_locationstesting 

INNER JOIN MYSQL_locations 
ON MYSQL_locationstesting.siteid=MYSQL_locations.id 

WHERE MYSQL_locationstesting.display = 1 
AND (CONVERT(DATE, MYSQL_locationstesting.duedate) < CAST(GETDATE() AS DATE) 
AND MYSQL_locations.active = 1 
OR CONVERT(DATE, MYSQL_locationstesting.duedate) BETWEEN DATEADD(DAY, -1, CAST(GETDATE() AS DATE)) 
AND DATEADD(DAY, 5, CAST(GETDATE() AS DATE))) 

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Начиная с SQL Server 2012, у вас есть TRY_PARSE / CONVERT / CAST, который может помочь.Вы видите эту ошибку, потому что что-то не может быть явно приведено к типу даты.

SELECT CONVERT(DATE, 'This will break!')

SELECT * 
FROM your_table 
WHERE TRY_PARSE(your_column AS DATE) IS NULL

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

AND TRY_PARSE(your_column AS DATE) IS NOT NULL

Это удалит их из ваших результатов, поэтому будьте осторожны с этим, если вы хотите каким-то образом захватить эти значения.

0 голосов
/ 24 июня 2019

В таблице MySQL есть некоторые данные, которые не являются допустимыми значениями даты.

Используйте TRY_CONVERT () и укажите любое значение по умолчанию для строк, которые нельзя преобразовать.

...