mssql中的DATE转换格式

时间:2018-04-17 06:50:41

标签: sql sql-server

我的hiredate列现在是yyyy-mm-dd hh:mm:ss格式,我想要DD-Mon-YYYY HR:MM格式的输出格式..

例如: -

hiredate(数据类型为varchar) 2018-04-16 12:19:10

如果在2018年4月16日12:20需要输出。

4 个答案:

答案 0 :(得分:1)

您需要CAST字段 DATETIME ,然后使用FORMAT函数。

FORMAT函数

中有三个参数
  1. 您的约会时间[requird]
  2. 此案例的FormatType您需要设置dd-MMM-yyyy hh:mm [requird]
  3. culture [可选]
  4. 根据您的问题,您需要检查日期时间是否有几秒钟。

    所以添加A CASE表达式来实现它。

    DECLARE @Dt VARCHAR(50) = '2018-04-16 12:19:10'
    
    SELECT 
    CASE 
      WHEN FORMAT(CAST(@Dt as datetime),'ss') > 0 
      THEN FORMAT(DATEADD(MINUTE,1,CAST(@Dt as datetime)),'dd-MMM-yyyy hh:mm', 'en-US') 
      ELSE FORMAT(CAST(@Dt as datetime),'dd-MMM-yyyy hh:mm', 'en-US')
    END
    

    sqlfiddle:http://sqlfiddle.com/#!18/22a72/2

    Format

答案 1 :(得分:0)

试试这个

DECLARE @MyDt NVARCHAR(50)='2018-04-16 12:19:10'

SELECT
    InputDt = @MyDt,
    NewDt = REPLACE(LTRIM(RTRIM(CONVERT(CHAR,CAST(@MyDt AS DATETIME),106))),' ','-')
+' '+CAST(CAST(@MyDt AS TIME) AS NVARCHAR(20))

我的结果:

enter image description here

答案 2 :(得分:0)

正如评论所说,您应将日期和时间导入datetimedatetime2列。但是,如果您坚持使用数据,这可能是您最接近的数据:

SELECT CONVERT(varchar(50), DATEADD(minute, DATEDIFF(minute, 0, DATEADD(second, 30, CAST('2018-04-16 12:19:10' as datetime2(0)))), 0), 113)
    , CONVERT(varchar(50), DATEADD(minute, DATEDIFF(minute, 0, DATEADD(second, 30, CAST('2018-04-16 12:19:31' as datetime2(0)))), 0), 113);

你可以抛出一些字符串操作来为日期部分添加破折号。

请注意,第二个CONVERT用于12:19:31时间,表示结果在需要时被舍入(在本例中为12:20)。

对于更多CONVERT格式,请查看this source

答案 3 :(得分:0)

试试这个

DECLARE @d varchar(50) = '2018-04-16 12:19:10'
SET @d = FORMAT(CONVERT(datetime, @d), 'dd-MMM-yyyy HH:MM', 'en-us')
SELECT @d

或者这......

SELECT FORMAT(CONVERT(datetime, '2018-04-16 12:19:10'), 'dd-MMM-yyyy HH:MM', 'en-us')

结果

enter image description here