Преобразование nvarchar в дату?(Типы данных, SQL) - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь преобразовать данные, импортированные в мое приложение, из nvarchar в дату, чтобы я мог сравнить дату с текущей системной датой, чтобы убедиться, что прошлые даты не используются.

Данные импортируются через приложение в общую таблицу, где все столбцы имеют тип nvarchar (процесс не может быть изменен), поэтому мне нужно преобразовать тип данных для сравнения поля с датой.

Я попытался использовать следующий код для преобразования даты (TestData, представляющий столбец, который я использую в данном случае):

CAST(TestData as date)
CONVERT(date, TestData)

Что выдает сообщение об ошибке в виде строки: Невозможно преобразовать nvarchar в дату.

Думая, что мне здесь чего-то не хватает, подумал, что мне здесь повезет.

Ответы [ 3 ]

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

Предполагая, что формат даты, который будет указан, всегда будет «ДД-ММ-ГГГГ», как вы сказали в одном из ваших комментариев:

DECLARE @data NVARCHAR(250)

SET @data = '24-06-2019'

SELECT CONVERT(DATE, @data, 103) AS [Date] -- 104 or 105 will work as well

Результат: 2019-06-24

  • 103 - британский / французский стандарт (дд / мм / гггг)
  • 104 - немецкий стандарт (дд.мм.гггг)
  • 105 - итальянский стандарт (дд-мм-гггг)
0 голосов
/ 01 июля 2019

Событие Если вы хотите преобразовать поле varchar в формат datetime, ваша входная запись должна быть в правильном формате.Скорее всего, ваши данные в поле varchar не в формате datetime.Может быть некоторые значения NULL.Пожалуйста, проверьте свои записи один раз.

или

Ваш ввод не в нужном формате.Используйте функцию convert для преобразования даты и времени с соответствующими date format.

Пожалуйста, найдите эту ссылку https://www.w3schools.com/sql/func_sqlserver_convert.asp для справки новообращенного.

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

Можете ли вы привести пример того, как выглядят ваши данные nvarchar?Я написал этот пример, чтобы показать вам, как сравнивать переменную nvarchar (200) с текущей датой, но nvarchar - это простое строковое значение, отформатированное в правильном формате, который будет понятен SQL (поэтому я и спрашиваю пример у вашегосторона ;-))

Use Master
go
declare @Dates as nvarchar(200)
set @dates = '23 jan 2019'
--set @dates = '23/01/2019' --This one will generate a Conversion Failed
--set @dates = '01/23/2019' --This one will NOT generate a Conversion Failed
Select Cast(@dates as Date) 'Casted', GetDate() 'Today',DateDiff(d,Cast(@dates as Date),GetDate()) 'Days'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...