【问题标题】:Convert from nvarchar to DateTime with am pm?使用 am pm 从 nvarchar 转换为 DateTime?
【发布时间】:2013-11-12 10:50:24
【问题描述】:

在我的表中,我有 myDate 类型为 nvarchar(50) 的列。

我需要的结果是选择这个日期/时间:07/11/2013 11:22:07

我需要从中获取07/11/2013 11:22:07 am(将am/pm 添加到原始日期和时间)。

我尝试了所有方法,但只获得了没有 am/pm 的原始数据。

这是我查询的一个例子:

select convert(dateTime,myDate,100) as Date from Info

select convert(dateTime,myDate,0) as Date from Info

我错过了什么?

【问题讨论】:

  • Bad habits to kick : mis-handling date / range queries - 你应该将日期存储为字符串 - 你只是在自找麻烦。使用DATEDATETIME 数据类型!
  • (1) 因为您将日期存储为字符串,所以您需要先将其转换为 DATETIMECAST(myDate AS DATETIME), (2 ) 然后pick one of the pre-existing styles for CONVERT,例如SELECT CONVERT(VARCHAR(50), CAST(myDate AS DATETIME), 100) - 如果这些样式都不完全符合您的需求,您要么必须使用 FORMAT(在 SQL Server 2012 和更新版本中),要么自己做很多字符串修改跨度>
  • 我知道...但是我得到了这些数据作为事实,并且必须以这种方式使用它..

标签: sql sql-server datetime type-conversion


【解决方案1】:

try this !!

declare @date datetime
set @date='07/11/2013 11:22:07'

SELECT cast(convert(varchar(20),substring(convert(nvarchar(20),@date, 9), 0, 21) 
+ ' ' + substring(convert(nvarchar(30), @date, 9), 25, 2),105) as datetime)

【讨论】:

  • 更好!但它会在 2013 年 7 月 11 日返回,而不是 2013 年 7 月 11 日
  • 好的,但是最好将第一句:substring(convert(nvarchar(20),@date, 9), 0, 21) 更改为原始变量(在我的情况下 - myDate) - 从表中返回信息和您的 : + ' ' + substring(convert(nvarchar(30), @date, 9), 25, 2) 添加 AM/PM
【解决方案2】:

您的字段是NVARCHAR 字段,因此只需将其返回而不进行任何转换。在您的查询中,您将字符串表示形式转换为 DATETIME 类型并返回它。您显示查询结果的浏览器软件将DateTime 值转换为字符串表示形式以显示给您,转换格式取决于此软件,通常您可以通过更改 Windows 区域设置来更改它。

【讨论】:

    【解决方案3】:

    您可以使用以下查询获取 AM/PM 数据

    declare @date datetime
    select @date= CAST('07/11/2013 11:22:07' AS datetime)
    select RIGHT ( CONVERT(VARCHAR,@date,9),2) 
    

    【讨论】:

    • 对不起。查询仅在数据类型为日期时间时有效。我已编辑帖子检查它。请立即查看。
    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2017-04-08
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多