Oracle
 sql >> база данни >  >> RDS >> Oracle

Sql сравнение на дата и час от двойна таблица

Добре, мисля, че те хванах. Искате ли да направите следното?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Доста необичайно е да се интересувате от милисекунди, но ако го правите, трябва да използвате systimestamp .

Съдейки по факта, че сте разделили дата и час, това са знаци, така че ще трябва да отгатна форматни маски . Ако грешат, връзката трябва да ви насочи какво да правите. Между другото, не е разумно да разделяте среща по този начин. Можете да създадете колона, като използвате timestamp тип данни във вашата таблица, което ще направи проблема ви изключително прост.

Така че не знам защо избрахте 'Day' формат за вашата заявка, но с този <some date> става to_char(sysdate, 'DAY') .

От вашия коментар по-долу <some date> ще бъде to_char(sysdate, 'DD-MON-YY')

<some time> ще бъде to_char(systimestamp,'HH24:MI:SS:FF3') , което ще ви даде клеймото за време до милисекунда, въпреки че типът данни може да достигне до микросекунда.

Изглежда ми малко странно, но вашата заявка тогава ще стане:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Би било по-нормално, ако съхранявате дата като низ, да я съхранявате във формат yyyymmdd така че поне можете да гарантирате, че е наред. Ако сте правили нещо подобно, просто променете маската на формата. Ако не сте го направили, тогава тези заявки няма да работят по предназначение.

Лично ако исаш за съхраняване на данни по този начин и приемайки state_date се съхранява като, да речем, dd-mon-yy , т.е. включително година, месец И ден и state_time се съхранява, както е посочено по-горе, тогава бих направил нещо подобно:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Това прави много по-очевидно какво се случва и няма неяснота какво < означава в тази ситуация, че датата винаги ще бъде по-малка от бъдеща дата, което не е непременно вярно за низове.

Надявам се, че това има смисъл.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Qt приложение се срива при използване на ODBC драйвер (macOS)

  2. Oracle 11g Bind променлива не съществува

  3. От XML до списък с пътища в Oracle PL/SQL среда

  4. Може ли да има блокиране при използване на оптимистично заключване?

  5. Има ли булев тип в базите данни на Oracle?