Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

конвертирайте varchar(ddmmyyyy) във формат на дата

ddmmyyyy не е валиден формат за дата. Първо трябва да превърнете този низ в нещо, което може да бъде анализирано като DATE / DATETIME . Най-бързият начин може да бъде просто SUBSTRING частите в mm/dd/yyyy формат. Това се преобразува успешно. Но вие имате VARCHAR(8) . Така че или трябва да увеличите това до VARCHAR(10) (или още по-добре, просто CHAR(10) ), или декларирайте локална променлива за съхранение на променената стойност.

Например:

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
             + '/' + SUBSTRING(@Date, 1, 2)
             + '/' + SUBSTRING(@Date, 5, 4);

SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014     2014-03-25

РЕДАКТИРАНЕ: Всъщност намерих малко по-прост начин. Започнах с този метод, но разбрах, че не работи с ddmmyyyy за разлика от mmddyyyy . Някак си пропуснах, че има подходящ номер на стил на дата за dd/mm/yyyy . И така, просто добавяне на две наклонени черти към входящия низ и след това извикване на CONVERT работи, но само ако използвате 103 като "стил". И подобно на първото решение, то изисква или промяна на входящия параметър да бъде VARCHAR(10) или CHAR(10) вместо VARCHAR(8) , или създаване на локална променлива, която да бъде CHAR(10) .

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');

SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014     2014-03-25

„Стилове“ за преобразуване могат да бъдат намерени на страницата на MSDN за CAST и CONVERT .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изпълните SQL заявка без показване на резултати

  2. Защо вмъкване-избиране към таблица с променлива от XML променлива толкова бавно?

  3. Актуализиране на всички SQL NULL стойности в множество колони с помощта на клауза WHERE на ниво колона?

  4. Добавете номер на ред към набор от резултати на SQL заявка

  5. Как да завъртите неизвестен брой колони и без агрегат в SQL Server?