【问题标题】:SQL : trying to find number of days in current monthSQL:尝试查找当前月份的天数
【发布时间】:2022-07-01 04:39:35
【问题描述】:

我的 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

【问题讨论】:

  • 我收到以下错误,因为数据集中没有日期,我将 GETDATE() 指定为要添加的日期。““@”或附近的语法错误
  • @Jesusbrother,你分享的上半部分好像没问题,你可以只运行你分享的选择,不包括 T1.costcenter_id 列吗?
  • @PankajSanwal 是的,这里没有发生错误:dbfiddle.uk/…
  • 是的,我在“@”附近遇到了同样的错误

标签: sql


【解决方案1】:

好吧,您提供的 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的例子,检查这里没有错误(由于整数除法的特殊性,在进行除法运算之前要注意转换成十进制或数字)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多