【问题标题】:Getting start time from a datetime range in SQL Server从 SQL Server 中的日期时间范围获取开始时间
【发布时间】:2022-01-03 15:58:17
【问题描述】:

我正在尝试从具有日期时间范围的列中的选择查询中将开始日期和开始时间放入 2 个单独的列中。

Date
1/1/22 12:00 pm - 1/1/22 12:59 pm
1/1/22 1:00 pm - 1/1/22 1:59 pm
12/31/21 7:00 am - 12/31/21 7:59 am
12/31/21 11:00 am - 12/31/21 11:59 am

到目前为止,我可以使用这个来确定开始日期:

LTRIM(RTRIM(CONVERT(DATE,RTRIM(LTRIM(LEFT([Date], CHARINDEX(' ',[Date]) + 0))))))

我的开始时间遇到错误,我现在的代码是这样的:

RTRIM(LTRIM(FORMAT(CAST(REPLACE(REPLACE(RTRIM(LTRIM(RIGHT(RIGHT(LEFT([Date], CHARINDEX('-', [Date]) - 1), LEN(LEFT([Date], CHARINDEX('-', [Date]) - 1)) - CHARINDEX('/21 ',LEFT([Date], CHARINDEX('-', [Date]) - 1))),LEN(RIGHT(LEFT([Date], CHARINDEX('-', [Date]) - 1), LEN(LEFT([Date], CHARINDEX('-', [Date]) - 1)) - CHARINDEX('/21 ',LEFT([Date], CHARINDEX('-', [Date]) - 1)))) - 1))),'am','AM'),'pm','PM') AS datetime),'hh:mm tt')))

我希望格式为 hh:mm am/pm。我认为导致错误的原因是字符的计数/索引,但我不确定如何解决。

这是我想要的结果:

Date Time
1/1/22 12:00 pm
1/1/22 1:00 pm
12/31/21 7:00 am
12/31/21 11:00 am

【问题讨论】:

  • 您必须在 SQL Server 中执行此操作吗?使用正则表达式会很容易处理。但核心 SQL Server 不支持正则表达式。
  • 是的,我需要在 SQL Server 中完成此操作
  • 你使用的是哪个版本的sql server?
  • SQL Server 2016 管理工作室 13.0.16106.4

标签: sql sql-server


【解决方案1】:

我们可以尝试使用基本字符串函数:

SELECT
    Date,
    LEFT(Date, CHARINDEX(' ', Date) - 1) AS Date,
    SUBSTRING(Date,
              CHARINDEX(' ', Date) + 1,
              CHARINDEX(' ', Date, CHARINDEX('-', Date) + 1) -
                  CHARINDEX(' ', Date) - 3) AS Time
FROM yourTable;

Demo

【讨论】:

  • 这很好用,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多