изменить параметр sql на десятичную дату - PullRequest
1 голос
/ 20 декабря 2011

У меня есть команда SQL в отчетах Crystal (все в порядке, если вы не знакомы с Crystal), и мне нужно преобразовать параметр даты в десятичную (для сопоставления столбца в базе данных).

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 ]

1 голос
/ 21 декабря 2011

Я думаю VARCHAR_FORMAT() на самом деле то, что вы ищете:

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

Возможно, вам придется обернуть @NormalDate с DATE(), чтобы привести его к датетип (зависит от вашего формата ввода).

1 голос
/ 20 декабря 2011

Я предлагаю создать формулу (называемую что-то вроде @decimaldate) в формуле для хранения эквивалентного числового значения вашего параметра даты - так что это будет что-то вроде:

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

- затем измените критерии выбора для выбора на основе новой формулы - например, так:

SELECT decimaldate FROM TABLE1 WHERE decimaldate = {@decimaldate}
1 голос
/ 20 декабря 2011

Попробуйте что-то вроде этого.

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

Или что-то вроде этого, где @normaldate - дата поиска.

SELECT decimaldate FROM TABLE1 WHERE decimaldate = CAST(replace(convert(varchar, @normaldate, 101), '/', '') AS DECIMAL)
0 голосов
/ 21 декабря 2011

Эта функция 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)
;
...