SQl-尝试查找当月的天数
SQl-Trying to find number of days in current month
我的 sql 有以下顶部部分。我正在尝试提取一个月中的当前天数。当我 运行 时,我收到错误“无效操作:无法将类型整数转换为没有时区的时间戳;”我如何更新它,以便它可以提取当月的天数。
SELECT T1.costcenter_id,
DATEPART(MONTH, GETDATE())as "present month",
DATEPART(DAY, GETDATE())as "present day",
DAY(EOMONTH(GETDATE())) as "days in month",
我用这个作为临时选择
CASE
WHEN DATEPART(MONTH, GETDATE()) = 1 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 2 THEN 28
WHEN DATEPART(MONTH, GETDATE()) = 3 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 4 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 5 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 6 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 7 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 8 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 9 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 10 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 11 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 12 THEN 31
END AS days_in_month
最终目标是获得该月的完成百分比,因此如果 6 月 3 日还有该月的 93%。下面的问题是我想要完成的。
1-(DATEPART(DAY, GETDATE())/ total days in the month) as % complete
好吧,您提供的 dbfiddle 无法正常工作,所以如果没有一些数据,我无法修复它。
因此我只能回答你的主要问题。下面是如何获取最后一天和完成百分比的示例:
WITH t as (
SELECT
DATEPART(MONTH, GETDATE())as present_month,
DATEPART(DAY, GETDATE())as present_day,
DAY(EOMONTH(GETDATE())) as days_in_month)
select t.*,
cast(present_day as decimal) / days_in_month * 100 as '% complete'
from t;
这里是dbfiddle例子,检查这里没有错误(由于整数除法的特殊性,请注意在执行除法运算之前转换为小数或数字)。
我的 sql 有以下顶部部分。我正在尝试提取一个月中的当前天数。当我 运行 时,我收到错误“无效操作:无法将类型整数转换为没有时区的时间戳;”我如何更新它,以便它可以提取当月的天数。
SELECT T1.costcenter_id,
DATEPART(MONTH, GETDATE())as "present month",
DATEPART(DAY, GETDATE())as "present day",
DAY(EOMONTH(GETDATE())) as "days in month",
我用这个作为临时选择
CASE
WHEN DATEPART(MONTH, GETDATE()) = 1 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 2 THEN 28
WHEN DATEPART(MONTH, GETDATE()) = 3 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 4 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 5 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 6 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 7 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 8 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 9 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 10 THEN 31
WHEN DATEPART(MONTH, GETDATE()) = 11 THEN 30
WHEN DATEPART(MONTH, GETDATE()) = 12 THEN 31
END AS days_in_month
最终目标是获得该月的完成百分比,因此如果 6 月 3 日还有该月的 93%。下面的问题是我想要完成的。
1-(DATEPART(DAY, GETDATE())/ total days in the month) as % complete
好吧,您提供的 dbfiddle 无法正常工作,所以如果没有一些数据,我无法修复它。 因此我只能回答你的主要问题。下面是如何获取最后一天和完成百分比的示例:
WITH t as (
SELECT
DATEPART(MONTH, GETDATE())as present_month,
DATEPART(DAY, GETDATE())as present_day,
DAY(EOMONTH(GETDATE())) as days_in_month)
select t.*,
cast(present_day as decimal) / days_in_month * 100 as '% complete'
from t;
这里是dbfiddle例子,检查这里没有错误(由于整数除法的特殊性,请注意在执行除法运算之前转换为小数或数字)。