【发布时间】:2021-05-19 11:04:31
【问题描述】:
我正在尝试将以下 oracle 查询转换为 SQL 服务器查询。
Select * from table A
WHERE TRUNC(a.Generate_DATE,'MM') = (SELECT (NVL (TRUNC (TO_DATE ('$$date','MM/DD/YYYY HH24:MI:SS')),TRUNC(ADD_MONTHS(SYSDATE, -1),'MM'))) FROM DUAL)
其中 $$date 是参数值,将从查询外部传递。
问题在于日期格式。我无法在 sql server 中转换这种精确格式。
【问题讨论】:
-
如果您使用的是 SQL Server,请首先使用类型良好的参数,您不需要任何这些转换过程,只需要基本的日期逻辑。
-
我是 sql server 新手。请提供日期逻辑
-
我看不懂 PL\SQL,所以我无法为您翻译以上内容,但基本的意思是基本的,例如
WHERE DateColumn = @DataParameter或WHERE DateColumn >= @StartDate AND DateColumn < @EndDate。 -
它应用的不是简单的日期过滤器。我们正在对日期进行一些转换,如 oracle 中的 trunc(date,'MM') 这给出了该月的第一个日期。第二部分是使用 NVL 函数。寻找sql server 中的等效函数。但是无论我在 google 中看到什么,都没有可用的直接函数
-
"我们在 oracle 中对日期进行一些转换,例如 trunc(date,'MM'),这给出了当月的第一个日期。" 不要这样做,这是不可搜索。而不是将列的日期更改为月份的第一个日期,而是使用日期边界;就像我在上面的评论中展示的那样。不要将列的值更改为
2021-02-01,而是查找列的值为>= '2021-02-01'和< '2021-03-01'的行。就像我说的,基本的日期逻辑。
标签: sql-server oracle11g sql-server-2012 date-conversion code-migration