SQL Текущая дата (AS400) - PullRequest
       28

SQL Текущая дата (AS400)

2 голосов
/ 05 марта 2011

Я пытаюсь выбрать записи из базы данных AS400 с текущей датой (в формате MMDDYY).

Вот что я планирую сделать:

SELECT * FROM tableName WHERE $DATE='030411'

Я попробовал комбинации этого, но безуспешно:

SELECT * FROM tableName WHERE $DATE='SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '')'

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 05 марта 2011

Попробуйте:

SELECT * FROM tableName WHERE $DATE=
   substring(cast(current date as char(10)),6,2) || 
   substring(cast(current date as char(10)),9,2) || 
   substring(cast(current date as char(10)),3,2)

Вы можете увидеть, какое значение возвращает это выражение, вот так:

select substring(cast(current date as char(10)),6,2) || 
   substring(cast(current date as char(10)),9,2) || 
   substring(cast(current date as char(10)),3,2)    
from sysibm.sysdummy1                                   

Вы должны использовать sysibm.sysdummy1, поскольку SQL в AS / 400(iSeries, System i и т. д.) не позволяет вам SELECT значений из ничего.

Также обратите внимание, что current date может вернуть дату в другом формате, в зависимости от даты SQLформат.Этот код ожидает, что он будет в формате * ISO (YYYY-MM-DD).

Вот некоторые операторы SQL, которые я использовал для проверки этой подпрограммы.

create table dmclib.test2 ( $DATE decimal(6,0) ) ;

insert into dmclib.test2 values   
  (010111), (010211), (031011) ;

SELECT * FROM dmclib.test2                         
where $DATE =                                      
   substring(cast(current date as char(10)),6,2) ||
   substring(cast(current date as char(10)),9,2) ||
   substring(cast(current date as char(10)),3,2) ;

Вот что я получил:

....+...                        
  $DATE                         
 31,011                         
********  End of data  ******** 
2 голосов
/ 03 июня 2011
insert( replace( char( current_date, usa ) , '/', '' ) , 5, 2, '')

Приведенное выше генерирует представление строки символов в формате * USA [то есть MM/DD/YYYY] для текущей даты с использованием скалярной функции CHAR, а затем заменяет символ '/' в строке MM/DD/YYYYс нулевой строкой, которая становится MMDDYYYY с использованием скалярной функции REPLACE, а затем вставляет нулевую строку, начиная с позиции пять [т.е. первая цифра YYYY в MMDDYYYY], удаляя два байта этой строки [т.е.«вставка» фактически заменяет пятый и шестой байты или в соответствии с аргументами скаляра вставки из пятого (5) для двух (2) байтов нулевой строкой] с использованием скалярной функции INSERT, таким образом производяжелаемый результат строки MMDDYY [где последние два байта YY - это части с номерами 10 ** 1 и 10 ** 0, обозначенные YYYY в MM/DD/YYYY].

С уважениемЧак

0 голосов
/ 03 сентября 2017

Попробуйте выполнить следующие шаги ..

  1. STRSQL

  2. НАПИШИТЕ СВОЙ ЗАПРОС

  3. НАЖМИТЕF4

  4. УСТАНАВЛИВАЙТЕ КУРСОР В ПЕРЕДНЕМ «ГДЕ»

  5. НАЖМИТЕ F4

  6. PUT 1ВПЕРЕД ВАШЕЙ СООТВЕТСТВУЮЩЕЙ ДАТЫ КОЛОНКА ИМЯ

  7. ХИТ ВВОД

  8. ЕСЛИ ВАША КОЛОННА ЦИФРА, то ДАЙТЕ ЗНАЧЕНИЕ БЕЗ ЦИТАТЫ, К примеру, 1234 И НЕ '1234'

  9. HIT ENTER

  10. ВЫ ДОЛЖНЫ ПОЛУЧИТЬ ВАШ РЕЗУЛЬТАТ

0 голосов
/ 05 марта 2011

030411 =

выберите подстроку (Заменить (Заменить (конвертировать (VARCHAR (10), GETDATE (), 101), '/', ''), '/', ''), 1,4) + подстрока (конвертировать (VARCHAR (4), год (GETDATE ()), 101), 3,2)

...