将sql参数更改为日期小数

Posted

技术标签:

【中文标题】将sql参数更改为日期小数【英文标题】:change sql parameter to date decimal 【发布时间】:2011-12-20 16:00:31 【问题描述】:

我在水晶报表中有一个 SQL 命令(如果您不熟悉水晶,也可以),我需要将日期参数转换为小数(以匹配数据库中的列。)

SELECT decimaldate FROM TABLE1 WHERE decimaldate = ?normaldate 
--ex: 12/01/2011 needs to become 12012011

如果我在上述查询中使用 CAST,则它不起作用:

SELECT decimaldate FROM TABLE1 WHERE decimaldate =
 CAST(CAST?normaldate AS VARCHAR) AS DECIMAL)

【问题讨论】:

在crystal中,crystal使用SQL,虽然数据源是DB2 DB2 有DatePart 函数吗? 可能,但是我在 Crystal 中使用 SQL,所以我必须使用 DB2 命令吗? @user719825:decimaldate 是如何存储在数据库中的?是从纪元日期(类似于 Unix 日期戳)、传统日期的 8 位音译(例如今天的 20121220)或其他方式开始流逝的时间吗? 我们还需要了解您的十进制类型如何表示日期?例如,0.0 是否代表01-01-1970 00:00:00.0000.5 代表01-01-1970 12:00:00.000?在不知道编码方式的情况下,我们无法确保给您一个准确的答案。 [这解释了@MarkBannister,他也刚刚问了一个类似的问题。] 【参考方案1】:

试试这样的。

 select CAST(replace(convert(varchar, getdate(), 101), '/', '') AS DECIMAL)

或类似@normaldate 是搜索日期的东西。

SELECT decimaldate FROM TABLE1 WHERE decimaldate = CAST(replace(convert(varchar, @normaldate, 101), '/', '') AS DECIMAL)

【讨论】:

我收到一个错误:结束语句无效。应该是 101 以外的东西吗? 这在 SQL Server 中有效,但不确定它在水晶报表中是否正确翻译。 101 是有效的数据格式。 anubhavg.wordpress.com/2009/06/11/… 试试这个 -> 选择转换(varchar,getdate(),101)。如果这样可行,它不喜欢替换语句。 应该是 ?normaldate 而不是 @normaldate。确保也在 Command 对象中创建参数。【参考方案2】:

我建议在公式中创建一个公式(称为@decimaldate)来保存您的日期参数的等效数值 - 所以它会是这样的:

year(?normaldate)*10000 + month(?normaldate)*100 + day(?normaldate)

- 然后修改您的选择标准以根据您的新公式进行选择 - 如下所示:

SELECT decimaldate FROM TABLE1 WHERE decimaldate = @decimaldate

【讨论】:

【参考方案3】:

我认为VARCHAR_FORMAT() 确实是您正在寻找的:

SELECT decimaldate
  FROM table1
 WHERE decimaldate = VARCHAR_FORMAT(@NormalDate, 'MMDDYYY')

您可能必须将 @NormalDateDATE() 包装起来才能将其转换为日期类型(这取决于您的输入格式)。

【讨论】:

这个功能很好用。根据 decimaldate 列的数据类型,您可能还需要将 VARCHAR_FORMAT() 调用的输出转换为 DECIMAL 类型。【参考方案4】:

这个 DB2 SQL 函数执行查询所需的日期到 MDY 十进制转换。创建后,您的查询可以将包含 MDY 日期的十进制列与 UTIL.TO_DECIMAL_MDY( someValidDate ) 的输出进行比较

CREATE OR REPLACE FUNCTION util.to_decimal_mdy(dateval DATE)
LANGUAGE SQL
RETURNS DECIMAL(9,0)
RETURN MONTH(dateval) * 10000000 + DAY(dateval) * 100000 + YEAR(dateval)
;

【讨论】:

以上是关于将sql参数更改为日期小数的主要内容,如果未能解决你的问题,请参考以下文章

通过运行 SQL 查询在 MS Access 2012 上更改年份日期格式的错误

如何在不更改现有组件文件的情况下通过插件将日期类型更改为下拉列表

无法更改日期格式 SQL

更改默认日期格式 laravel sql 查询

无法将数据类型更改为日期

SQL Server 2012 如何将列的数据类型从位更改为日期字段?