SQL Server将DD / MM / YY转换为YYYY-DD-MM

时间:2009-09-04 13:30:29

标签: sql-server

我想在INSERT SQL中执行此操作。谁能告诉我。

由于

- 标记

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

这样的事情应该有效:

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

答案 2 :(得分:1)

我不确定我是完全遵循的,但是如果您正在使用{dd / mm / yy'形式的datetime并尝试将其变为varchar(10)形式yyyy-dd-mm然后我认为您需要转换为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

它不漂亮,但它有效!

答案 3 :(得分: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')

答案 4 :(得分:0)

我们不知道YY中的DD/MM/YY是在当前世纪还是上个世纪。例如,如果YY15,我们不知道这是1915还是2015。所以0到15之间的数字将被视为当前世纪。如果当前年份是2016年,则0到16之间的数字将被视为当前世纪(其动态)。

示例

  • YY15时,YYYY将为2015
  • 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)