【问题标题】:dateformat with ISO8601 standard符合 ISO 8601 标准的日期格式
【发布时间】:2013-06-21 06:25:25
【问题描述】:

我想将日期格式 yyyy-mm-ddThh:mm:ss.mmm 转换为 yyyy-mm-ddThh:mm:ss,在 XML 中没有毫秒 现在我的格式是:2013-06-21T12:50:01.444。

我希望它在 sql server 中没有毫秒

【问题讨论】:

  • 您使用的是什么数据库系统?日期格式化函数在它们之间有所不同(XML 支持也是如此)。您可以添加更多描述 - 我实际上不确定您的起点和终点实际上是什么。我认为其中一个是 XML(不确定是哪个),另一个是什么?一个专栏?一个变量?结果集?
  • 你想从 sql server 实现这个吗?你要查询吗?
  • 搜索“正则表达式替换”(假设 XML 只是文本):\d\d\d\d-\d\d-\d\dT\d\d\:\d\d\.\d\d\d 或其变体[0-9]{4}(年份)。 Oracle 有 REGEXP_REPLACE。

标签: sql sql-server xml


【解决方案1】:
-- Truncate datetime value to seconds in XML variable 
declare @XML xml

-- Create XML
select @XML =
  (
  select getdate() as value
  for xml path(''), type
  )

-- Show current value
select @XML

-- Remove three last characters using substring
set @XML.modify('replace value of (/value/text())[1] 
                 with substring((/value)[1], 1, 19)')

-- Show modified value
select @XML

replace value of (XML DML)
substring Function (XQuery)

如果您不想修改您的 XML,而只是在获取值时截断到秒,您可以在使用 value() 方法时将 char(19) 指定为 SQLType。

select @XML.value('(/value/text())[1]', 'char(19)')

或datetime2(0),如果您使用的是 SQL Server 2008 或更高版本。

select @XML.value('(/value/text())[1]', 'datetime2(0)')

value() Method (xml Data Type)
datetime2 (Transact-SQL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    相关资源
    最近更新 更多