sql >> Databasteknik >  >> RDS >> Sqlserver

konvertera varchar(ddmmyyyy) till datumformat

ddmmyyyy är inte ett giltigt datumformat. Du måste först göra den strängen till något som kan tolkas som en DATE / DATETIME . Det snabbaste sättet kan vara att helt enkelt SUBSTRING bitarna till en mm/dd/yyyy formatera. Det konverterar framgångsrikt. Men du har en VARCHAR(8) . Så du måste antingen öka det för att vara VARCHAR(10) (eller ännu bättre, bara CHAR(10) ), eller deklarera en lokal variabel för att hålla det ändrade värdet.

Till exempel:

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: Jag hittade faktiskt ett lite enklare sätt. Jag började med den här metoden men insåg att den inte fungerade med ddmmyyyy i motsats till mmddyyyy . Jag missade på något sätt att det fanns ett passande datumstilsnummer för dd/mm/yyyy . Så, helt enkelt lägga till två snedstreck till den inkommande strängen och sedan anropa CONVERT fungerar, men bara om du använder 103 som "stilen". Och precis som den första lösningen kräver den antingen att den inkommande parametern ändras till att vara VARCHAR(10) eller CHAR(10) istället för VARCHAR(8) , eller skapa en lokal variabel som ska vara 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 "stilar" finns på MSDN-sidan för CAST och CONVERT a> .




  1. något om ansi_nulls

  2. Dela radresultat till kolumn

  3. xquery value()-metoden fungerar inte och ger ett fel

  4. Att använda npgsql 12 och ef 6 tillsammans - har någon lyckats med det?