将VBA日期函数转换为SQL

时间:2019-12-30 13:24:57

标签: sql teradata

我需要帮助,将以下vba代码转换为类似的SQL字符串。

    vDt = Now()
    vStartDate = UCase(Format(DateSerial(Year(vDt), Month(vDt) - 1, 1), "DD-MMM-YYYY"))
    vEndDate = UCase(Format(DateSerial(Year(vDt), Month(vDt), 0), "DD-MMM-YYYY"))

2 个答案:

答案 0 :(得分:0)

如果我正确理解这一点,则希望开始日期为上个月的第一天,结束日期为当前月份的最后一天。然后,您要将它们转换为日期格式DD-MMM-YYYY。如果是这样,下面将是相应的SQL:

DECLARE @now DATETIME;
DECLARE @start DATETIME;
DECLARE @end DATETIME;
SET @now = GETDATE();
SET @start = DATEADD(MONTH, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, @now), 0));
SET @end = EOMONTH(@now);

SELECT UPPER(REPLACE(CONVERT(VARCHAR(12), @start, 106), ' ', '-')) AS StartDate,
    UPPER(REPLACE(CONVERT(VARCHAR(12), @end, 106), ' ', '-')) AS EndDate;

编辑-抱歉,我应该提到这是在Microsoft T-SQL中而不是Teradata SQL Assistant中(谢谢@a_horse_with_no_name)。我对Teradata并不熟悉,所以我无法给您确切的答案,但是我相信您可以找到类似的函数来翻译上述答案。

答案 1 :(得分:0)

在Teradata SQL中,您使用来获取上个月的第一天

 Trunc(Add_Months(Current_Date, -1), 'mon')

以及本月的最后一天:

Last_Day(Current_Date)

如果要使用DD-MMM-YYYY字符串,当然可以返回数据:

SELECT
   To_Char(Trunc(Add_Months(Current_Date, -1), 'MON'), 'DD-MON-YYYY')
  ,To_Char(Last_Day(Current_Date), 'DD-MON-YYYY')