将sql参数更改为date decimal

时间:2011-12-20 16:00:31

标签: sql database crystal-reports db2

我在水晶报告中有一个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)

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

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

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

SELECT decimaldate FROM TABLE1 WHERE decimaldate = {@decimaldate}

答案 2 :(得分:1)

我认为VARCHAR_FORMAT()实际上就是你要找的东西:

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

您可能需要将@NormalDateDATE()一起包装,以将其转换为日期类型(取决于您的输入格式)。

答案 3 :(得分:0)

此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)
;