2009-09-04 49 views
-1

我想在INSERT SQL中執行此操作。任何人都可以告訴我。SQL Server將DD/MM/YY轉換爲YYYY-DD-MM

感謝

--mark

+0

是日期datetime或(VAR)字符? – pjp 2009-09-04 13:32:31

+0

這是一個日期時間 – madphp 2009-09-04 13:33:17

+0

也應該是YYYY-DD-MM – pjp 2009-09-04 13:34:02

回答

2

像這樣的東西應該工作:

insert into TableName(DateColumn) 
select convert(datetime,getDate(),103) 
+1

121是yyyy-mm-dd – pjp 2009-09-04 13:35:38

+0

@pjp:所以現在已經糾正了。 – 2009-09-04 13:37:53

+0

+1 - 轉換函數應該做你需要的。 – 2009-09-04 13:40:16

1

我不知道,我完全跟隨,但如果你正在服用'dd/mm/yy'形式的datetime,並試圖將其轉換爲形式爲yyyy-dd-mmvarchar(10),然後我認爲喲日子會把你需要轉換爲varchar,然後用SUBSTRINGLEFTRIGHT拔出你需要的數據:

declare @dt datetime 
select @dt = getdate() -- i.e. 04/09/2009 

declare @str varchar(8) 
select @str = convert(varchar(8),@dt,112) --gives 20090904 
select LEFT(@str,4) + '-' + RIGHT(@str,2) + '-' + SUBSTRING(@str,5,2) -- gives 2009-04-09 

這是不漂亮,但它的工程!

+0

我寧願去尋求更爲一般的日期格式化功能,而不是根據具體情況逐個格式化格式:) – pjp 2009-09-04 13:53:31

0

採取從http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/

一起來看看這款定製的日期格式功能,這可以讓你在任何你想要的格式的日期。不過,我不知道爲什麼你想要一個YYYY-DD-MM格式的日期,因爲這是非標準的。

———— 
– SQL datetime functions 
– SQL Server date formats 
– T-SQL convert dates 
– Formatting dates sql server 

CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32)) 
RETURNS VARCHAR(32) 
AS 
BEGIN 
    DECLARE @StringDate VARCHAR(32) 
    SET @StringDate = @FormatMask 
    IF (CHARINDEX ('YYYY',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'YYYY', 
         DATENAME(YY, @Datetime)) 

    IF (CHARINDEX ('YY',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'YY', 
         RIGHT(DATENAME(YY, @Datetime),2)) 

    IF (CHARINDEX ('Month',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'Month', 
         DATENAME(MM, @Datetime)) 

    IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0) 
     SET @StringDate = REPLACE(@StringDate, 'MON', 
         LEFT(UPPER(DATENAME(MM, @Datetime)),3)) 

    IF (CHARINDEX ('Mon',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'Mon', 
            LEFT(DATENAME(MM, @Datetime),3)) 

    IF (CHARINDEX ('MM',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'MM', 
        RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2)) 

    IF (CHARINDEX ('M',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'M', 
         CONVERT(VARCHAR,DATEPART(MM, @Datetime))) 

    IF (CHARINDEX ('DD',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'DD', 
         RIGHT('0'+DATENAME(DD, @Datetime),2)) 

    IF (CHARINDEX ('D',@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, 'D', 
            DATENAME(DD, @Datetime)) 

RETURN @StringDate 
END 

然後你就可以調用這個: SELECT dbo.fnFormatDate (getdate(), 'YYYY-DD-MM')

+0

+1 For純粹的努力 - 不錯的一個! – butterchicken 2009-09-04 13:52:35

+0

嗯投票戰爭...有趣的遊戲兒童...請任何downvotes留下評論。 – pjp 2009-09-04 13:59:43

0

我們不知道YYDD/MM/YY是否是當前一個世紀以前的世紀。例如,如果YY15,我們不知道這是否是19152015。所以0到15之間的數字將被視爲當前世紀。如果當前是2016年,那麼0到16之間的數字將被視爲當前世紀(其動態)。

  • YY15,然後YYYY2015
  • YY97時,那麼YYYY將是1997

QUERY

DECLARE @DATECOL VARCHAR(13) = '25/01/15' 


SELECT CASE WHEN RIGHT(@DATECOL,2) BETWEEN 0 AND CAST(RIGHT(YEAR(GETDATE()),2)AS INT) 
THEN '20' + RIGHT(@DATECOL,2) ELSE '19' + RIGHT(@DATECOL,2) END 
+ '-' + LEFT(@DATECOL,2) + '-' + LEFT(RIGHT(@DATECOL,5),2)