如何在SQL Server中基于时间获取回历月份?

时间:2019-06-12 19:59:26

标签: sql sql-server date datetime hijri

我正试图获得回历月

例如

  

如果Time部分小于04:00:00,则第1天并获取该日期的月份

例如:公历日期为'2019-06-04 03:42:37.030'=回历日期为1-09-1440(dd-MM-yyyy)

期望输出

Month
-----
  08   //because time is less than 4:00:00 AM

例如:公历日期为'2019-06-04 04:42:37.030'=回历日期为1-09-1440(dd-MM-yyyy)

期望输出

Month
-----
  09   //because time is greater than 4:00:00 AM
  

其他月份的同一天

1 个答案:

答案 0 :(得分:1)

您可以使用convert来获取回历日期:

convert(varchar(10),<your column> ,131)

我们可以将其与c​​ase语句和dateadd结合使用以处理您的时间要求。

case when cast(<your column> as time) < '04:00:00'
then convert(varchar(10),dateadd(day,-1,<your column>),131)
else 
convert(varchar(10),<your column>) end

最后,您可以使用子字符串(和patindex)提取月份。 (摘录等不适用于此日期格式。)

select
substring(
  derived_hijri_date,
  patindex('%[/]%', derived_hijri_date) + 1,
  2)
from
(
select
 case when cast(<your column> as time) < '04:00:00'
  then convert(varchar(10),dateadd(day,-1,<your column>),131)
 else 
  convert(varchar(10),<your column>,131) end as derived_hijri_date
from
 <your table>
) t

Fiddle