【问题标题】:Convert '2018-07-02 00:01:22.000' to '02-Jul-18' in SQL Server在 SQL Server 中将 '2018-07-02 00:01:22.000' 转换为 '02-Jul-18'
【发布时间】:2018-07-18 05:08:10
【问题描述】:

我正在尝试在 SQL Server 中将 '2018-07-02 00:01:22.000' 转换为 '02-Jul-18'。我已经使用基本的 SQL Server CONVERT() 函数尝试了以下可能性,但我无法得到解决方案。

SELECT CONVERT(varchar(11), transfer_date, 106) 

DECLARE @Date AS DateTime = '2018-07-02 00:01:22.000'
SELECT CONVERT(varchar(12), @Date, 106)

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 选择转换(varchar(11), transfer_date, 106)
  • 你知道cast()
  • 不是从一种数据类型转换成另一种数据类型吗?我是 SQL 初学者,如有错误,请见谅。
  • 以后请编辑问题并添加您尝试过的内容。更好的是,实际上把它放在首位。

标签: sql sql-server date time sql-server-2012


【解决方案1】:

下面的查询将有助于将日期时间返回为DD-Mon-YY 格式:

DECLARE @Date AS DateTime = '2018-07-02 00:01:22.000';
SELECT REPLACE(CONVERT(VARCHAR(9), @Date, 6), ' ', '-');

结果:

02-Jul-18

【讨论】:

【解决方案2】:

如果你想将 string '2018-07-02 00:01:22.000' 转换为 string '02-Jul-18',那么你必须使用 CONVERT 两次,一次将输入一个日期,然后第二次将该日期恢复为您想要的格式的字符串。

SELECT
    REPLACE(CONVERT(varchar,
                    CONVERT(datetime, '2018-07-02 00:01:22.000', 121),
                    106), ' ' , '-');

Demo

请注意,如果您的起始值已经是日期时间,您可以取消对CONVERT 的调用之一:

SELECT REPLACE(CONVERT(varchar, transfer_date, 106), ' ' , '-');

【讨论】:

    【解决方案3】:

    试试下面的代码:

    declare @Date as DateTime='2018-07-02 00:01:22.000'
    
    select REPLACE(Convert(varchar(12),@Date,106),' ','-')
    

    【讨论】:

    • 在“2018 年 7 月 2 日”之间需要一个“-”,比如“02-Jul-18”
    • 很简单的事情 select REPLACE(Convert(varchar(12),@Date,106),' ','-')
    • 使用replace(@date,' ','-')
    【解决方案4】:

    你可以试试这样的:

    declare @mydate datetime2
    declare @converted varchar(100)
    set @mydate = cast('2018-07-02 00:01:22.000' as datetime2)
    set @converted = replace(convert(varchar, @mydate , 106), ' ', '-')                    
    
    select concat(left(@converted, 7), right(@converted, 2))
    

    示例:http://rextester.com/BCAZ47264

    结果:02-Jul-18

    单语句查询

    select 
    concat(
        left (
            replace (
                convert(varchar, cast('2018-07-02 00:01:22.000' as datetime2), 106),
                ' ',
                '-'
            ), 7)
        , right (
            replace (
                convert(varchar, cast('2018-07-02 00:01:22.000' as datetime2), 106),
                ' ',
                '-'
            ), 2)
        )
    

    【讨论】:

    • 运行良好,伙计@zedfoxus。感谢所有人的这个线程。如果发现比这更好的东西,请随时发布。
    • 太棒了。将针对您的问题提供的任何答案标记为最终答案,以结束您的问题。
    • 您正在使用很多功能。那是功能滥用。 Cast、Convert、Replace、Left、right 和 concat。您可以使用转换和替换来实现相同的效果。
    猜你喜欢
    • 2014-12-28
    • 2018-02-04
    • 2016-08-03
    • 1970-01-01
    • 2019-04-16
    • 2015-08-28
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多