【问题标题】:Getting time from datetime in sql server从sql server中的datetime获取时间
【发布时间】:2015-05-21 12:40:57
【问题描述】:

有人能告诉我以下代码有什么问题吗?我正在尝试获取时间部分,但它不起作用。

declare @LssiTime nvarchar(30) 
declare @NewLssiTime varchar(5)

set @LssiTime = '2015-03-18 11:45:47.390'
SELECT  @NewLssiTime = CONVERT(varchar(5), @LssiTime,108) 
select @NewLssiTime

【问题讨论】:

  • 输出为“2015-”
  • 只需使用Select cast(@LssiTime AS Time) OR 在您当前的查询中更改为CONVERT(varchar(8), @LssiTime,108)

标签: sql


【解决方案1】:

试试这个:SELECT @NewLssiTime = cast(@LssiTime as time)

它会为你的场景工作。

另外在阅读另一个答案后,它不起作用的原因是因为sql server将@LssiTime视为varchar而不是datetime。 在这种情况下,您将不得不这样做:

Set  @NewLssiTime = CONVERT(char(5),Convert(datetime,@LssiTime) ,108) 

【讨论】:

    【解决方案2】:

    这不起作用的原因是因为@LssiTime 是一个varchar,因此样式108 什么都不做。另一个例子是:

    SELECT CONVERT(VARCHAR(5), 'CONVERSTION TEST', 108);
    
    -------
    CONVE
    

    仅仅因为您将'2015-03-18 11:45:47.390' 读取为日期,并不能改变您告诉SQL Server 它是nvarchar(30) 的事实。

    好消息是,SQL Server 已经准备好在没有nvarcharvarchar 的情况下处理日期和时间,有许多date and time formats and functions,这意味着您不需要依赖字符串转换。

    这给我带来了您的字符串格式的另一个问题。如果你跑了:

    SET DATEFORMAT MDY;
    DECLARE @Date DATETIME = '2015-03-18 11:45:47.390';
    SELECT CAST(@Date AS TIME(0));
    

    你得到11:45:47 的结果。如果您要使用不同的区域设置运行它:

    SET DATEFORMAT DMY;
    DECLARE @Date DATETIME = '2015-03-18 11:45:47.390';
    SELECT CAST(@Date AS TIME(0));
    

    你得到一个错误:

    将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

    在 SQL Server 中处理DATETIMESMALLDATETIME 时,唯一 文化不变格式是yyyyMMdd,因此您可以使用任何设置运行以下命令而不会出现错误:

    DECLARE @Date DATETIME = '20150318 11:45:47.390';
    SELECT CAST(@Date AS TIME(0));
    

    如果你坚持使用字符串,那么至少我们是一个合适的字符串,一个有效的日期时间不会包含 unicode 字符,所以你也可以使用varchar,就像上面一样,转换为时间会隐式地将您的字符串转换为日期,因此您仍然可以使用:

    DECLARE @Date VARCHAR(30)  = '20150318 11:45:47.390'
    SELECT  CAST(@Date AS TIME(0));
    

    如果您希望您的时间为 varchar(5),您仍必须在转换为 varchar 之前转换为时间或日期时间:

    DECLARE @Date VARCHAR(30)  = '20150318 11:45:47.390'
    DECLARE @Time VARCHAR(5) = CAST(CAST(@Date AS TIME(0)) AS VARCHAR(5));
    SELECT @Time;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 2011-06-07
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2014-07-05
      • 1970-01-01
      相关资源
      最近更新 更多