ShanifHassan Ответов: 2

NVARCHAR to datetime


Всем привет,

У меня есть поле в моей таблице БД, которое хранит дату в формате YYMMDD, но тип данных поля-NVARCHAR (60). Мне нужно отобразить это поле в формате гггг-ММ-ДД. Пожалуйста, помогите мне в этом.

Что я уже пробовал:

Я попробовал ниже синтаксис, но результат показывает то же самое.

CONVERT(nvarchar, [EFT Trans_ Date], 120)

RedDk

Вот мой совет по TSQL стоимостью в два цента. Прежде всего, TSQL-это просто еще один язык, используемый разработчиками для обращения к аппаратному обеспечению через программное обеспечение, а SQLServer-это одна из разновидностей SQL в "Цзин Тянь" вкусов. Никто не знает, что вы имеете в виду для вашего программного обеспечения, задачи, лежащей в основе математики, которую вы используете, что означает для вас "перевод", поэтому все, что они говорят о том, что вы квалифицировали как основной формат проблемы, в частности то, что хранится как NVARCHAR (возможно, зная, что есть дата-время ...) и как конвертировать не работает для вас ... на самом деле это не имеет значения.

Ваша БД может хранить дату как угодно. Просто и ясно. Насколько все эти умники говорят под здесь делать ... используйте BOL и начните с запуска примера кода, найденного путем ввода параметров поиска, связанных с тем, что текст сообщения делает наиболее выдающимся. Это типичный глагол.

2 Ответов

Рейтинг:
16

OriginalGriff

Просто: измените дизайн своей базы данных.
Никогда не храните даты (или что-либо другое, кроме "чистых" строковых данных, таких как имена и адреса) в Столбцах NVARCHAR или VARCHAR, всегда храните данные в соответствующих типах данных. Для целочисленных значений это INT, для плавающей точки-FLOAT или DECIMAL. Для дат это DATE, DATETIME или DATETIME2.

Если вы этого не сделаете, то сделаете свою работу еще более сложной, а также оставите себя открытым для ввода плохих данных, которые с течением времени становится все труднее исправить.

Поэтому измените дизайн своей БД и перенесите столбцы NVARCHAR в правильный тип данных. Может показаться, что это много бессмысленной работы, но это сэкономит вам огромное количество времени и душевной боли позже.


Maciej Los

О, нет! Еще 5!

MadMyche

То же

Рейтинг:
0

Maciej Los

Я полностью согласен с О. Г. Обратите внимание, что преобразование строки в формат YYMMDD правильно датировать-это нелегкая работа, потому что вековая (возрастная) часть отсутствует. Например:
"880521"может стать в: 18880521 или 19880521 или 20880521

Начиная с MS SQL Server 2012, Вы можете использовать: DATEFROMPARTS (Transact-SQL) - SQL Server | Microsoft Docs[^Примечание: Вы должны передать год, месяц и день как целочисленные значения. Итак, вы должны разделить строку YYMMDD на части и преобразовать[^] их к правильным целочисленным значениям.

Разбиение текста-еще одна трудность, поскольку оно зависит от версии SQL server.
До 2012 года вам необходимо использовать SUSTRING()[^] функция.
Начиная с 2016 года, вы можете использовать STRING_SPLIT (Transact-SQL) - SQL Server | Microsoft Docs[^]

Кстати: вы можете создать определяемая пользователем функция[^], который получает YYMMDD текст и возвращает правильное время даты (на основе вашей логики века/возраста).


Richard Deeming

NB: STRING_SPLIT здесь это не поможет, так как нет разделителя для разделения. :)

Maciej Los

:смеяться:
- Спасибо, Ричард.