sql >> Database teknologi >  >> RDS >> Sqlserver

konverter varchar(ddmmyyyy) til datoformat

ddmmyyyy er ikke et gyldigt datoformat. Du skal først lave den streng til noget, der kan parses som en DATE / DATETIME . Den hurtigste måde kan være blot at SUBSTRING brikkerne til en mm/dd/yyyy format. Det konverterer med succes. Men du har en VARCHAR(8) . Så du skal enten øge det til at være VARCHAR(10) (eller endnu bedre, bare CHAR(10) ), eller erklære en lokal variabel til at holde den ændrede værdi.

For eksempel:

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

EDIT: Faktisk fandt jeg en lidt enklere måde. Jeg startede med denne metode, men indså, at den ikke virkede med ddmmyyyy i modsætning til mmddyyyy . Jeg savnede på en eller anden måde, at der var et passende datostilnummer for dd/mm/yyyy . Så du skal blot tilføje to skråstreger til den indgående streng og derefter kalde CONVERT virker, men kun hvis du bruger 103 som "stilen". Og ligesom den første løsning kræver det enten at ændre den indgående parameter til at være VARCHAR(10) eller CHAR(10) i stedet for VARCHAR(8) , eller oprette en lokal variabel til at være 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

Konvertering "styles" kan findes på MSDN-siden for CAST og CONVERT a> .




  1. Datointerval overlappende kontrolbegrænsning

  2. Tilslutning til en Oracle-database ved hjælp af SQLAlchemy

  3. gendan mysql-database fra ibdata1

  4. få korrekt datoformat fra SQL-søgeresultater (datetime.datetime)