【问题标题】:SQL Select Specific Date format dd/mm/YYYY hh:mm:ssSQL 选择特定日期格式 dd/mm/YYYY hh:mm:ss
【发布时间】:2015-08-25 06:49:28
【问题描述】:

我想从日期格式存储为 'Jan 27 2015 12:00AM' 的表格中选择一条记录,当我选择时,我应该将日期转换为以下格式 '27 /01/2015 00:00:00'.

我尝试了以下它适用于日期但不适用于时间。所以我使用了获取日期。

select  CONVERT(VARCHAR(10), CONVERT(date,StartDate,106), 103) + ' ' 
+ convert(VARCHAR(8), GETDATE(), 14) as StartDate from Logistic

谁能帮我正确转换日期格式。

我试过答案:

CONVERT(VARCHAR(10), StartDate, 103) 
                        + ' ' + CONVERT(VARCHAR(8), StartDate, 108)

结果:201 年 8 月 25 日 8 月 25 日 2

【问题讨论】:

  • “从日期格式存储为 'Jan 27 2015 12:00AM' 的表格中”是否意味着该日期存储为字符串?
  • 是的.. 它存储在 varchar @Shnugo
  • @TomPHP 检查我的答案。
  • 阅读大量答案后,考虑将其存储在正确的数据类型中,即datetime 或其变体之一

标签: sql sql-server date datetime


【解决方案1】:

将 MMM dd yyyy HH:MM[AM|PM] 转换为 dd/MM/yyyy hh:mm:ss

Declare @Date VARCHAR(20) = 'Jan 27 2015 12:05AM'

SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, @Date),103)
          + ' ' + CONVERT(VARCHAR(8), CONVERT(DATETIME, @Date),108)


    Result:    27/01/2015 00:05:00

【讨论】:

  • 你使用 getdate 我需要使用表格字段它不起作用..抱歉
  • 你能检查一下我在你查询后更新了答案的问题吗。
【解决方案2】:

https://msdn.microsoft.com/en-us/library/ms187928.aspx

将您的 varchar(从格式 100)转换为日期时间。然后将您获得的日期时间转换为格式 103(日期)和 108(时间)。最后将103格式的日期和108格式的时间拼接起来。

--  'Jan 27 2015 12:00AM' --> '27/01/2015 00:00:00'
SELECT  CONVERT(VARCHAR(25),CONVERT(DATETIME,'Jan 27 2015 12:00AM',100),103)
  +' '+ CONVERT(VARCHAR(25),CONVERT(DATETIME,'Jan 27 2015 12:00AM',100),108)

【讨论】:

    【解决方案3】:

    检查一下:希望这能回答您的问题...

    编辑:希望这是您需要的格式:L

    declare @d VARCHAR(100) ='Jan 27 2015 11:59AM';
    
    SELECT CONVERT(VARCHAR(10),CAST(@d AS DATE),103) + ' ' + CAST(CAST(@d AS TIME) AS VARCHAR(8))
    

    我不习惯 AM/PM 格式,并且我认为 12:00 AM 是中午,12:00 PM 是午夜,但恰恰相反......我有点困惑那一刻... ;-)

    declare @d VARCHAR(100) ='Jan 27 2015 11:59AM';
    SELECT CONVERT(DATETIME,@d,100);
    
    SET @d ='Jan 27 2015 12:00AM';
    SELECT CONVERT(DATETIME,@d,100);
    
    SET @d ='Jan 27 2015 12:01AM';
    SELECT CONVERT(DATETIME,@d,100);
    
    --some more, just to check...
    SET @d ='Jan 27 2015 10:00AM';
    SELECT CONVERT(DATETIME,@d,100);
    
    SET @d ='Jan 27 2015 10:00PM';
    SELECT CONVERT(DATETIME,@d,100);
    
    SET @d ='Jan 27 2015 00:00AM';
    SELECT CONVERT(DATETIME,@d,100);
    

    【讨论】:

    • 它转换为日期时间不是我需要的格式。你的输出是 2015-08-25 00:00:00.000
    • @TomPHP,请将我的几行 SQL 复制到一个 SQL 窗口中并执行...前三个是最有趣的。显然,您的“12AM”示例反映为午夜并返回“00:00:00”
    • @TomPHP,我误读了你的问题......无论如何,我的答案中有一个例子可以导致预期的结果。
    【解决方案4】:

    你可以这样做,首先转换为DATETIME,然后转换为NVARCHAR数据类型:

    DECLARE @dt VARCHAR(200)='Jan 27 2015 10:00AM';
    
    SELECT CONVERT(NVARCHAR(20),CONVERT(DATE,@dt,103),103) + ' ' + 
           CAST(CAST(@dt AS TIME(0)) AS NVARCHAR(20));
    

    输出:

    27/01/2015 10:00:00
    

    【讨论】:

      【解决方案5】:

      您可以使用样式 100 将 convert 转换为 date 并使用样式 120 转换回 VARCHAR

      DECLARE @yourdate VARCHAR(100)='Jan 27 2015 12:00AM';
      
      SELECT REPLACE(CONVERT(VARCHAR(50),CONVERT(DATETIME,@yourdate,100),120),'-','/');
      

      输出

      2015/01/27 00:00:00
      

      【讨论】:

        【解决方案6】:

        试试:

        declare @strDate varchar(max)='Jan 27 2015 12:00AM'
        
        
        select Convert(varchar(50),CONVERT(datetime, @strDate, 100),103)+' '+
        cast(convert(time,@strDate,108) as varchar(8))
        

        【讨论】:

        • 虽然此代码可能会回答 OP 的问题,但几句话的解释将有助于当前和未来的读者更好地理解您的答案。
        猜你喜欢
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        • 2013-11-01
        • 2020-03-07
        相关资源
        最近更新 更多