Jump to content
php.lv forumi

problēma ar oracle sql


macho

Recommended Posts

Man vajag salīdzināt kolonnu, kur ir datums + laiks (31.10.2006 14:21:59) ar kolonnu kur ir DAUDZ datu, no kuriem datums atrodas sākot ar 479 simbolu.

 

tātad kā tas apmēram izskatās :

select log_date, new_state, from TABULA

where to_date( (select dbms_lob.substr(new_state, 10,479) from TABULA) , 'dd.mm.yyyy') > to_date(log_date, 'dd.mm.yyyy')
and rownum <=100;

met ārā erroru - ORA-01427: single-row subquery returns more than one row

 

Ja es neizmantoju to to_date tad viņš man tos abus datumus salīdzina kā stringus, kas man neder

es nejēdzu ne izmantot mainīgos ne arī daudz ko citu - es vislaik pieeju tam visam ar tādu kā programmētāja pieeju un nesaprotu, kas šajā situācijā jādara - internetā jau meklēju, tur līdzīgu gadījumu neatradu.

 

kādi varianti salīdzināt normāli tos datus kas atrodas tai teksta blāķī?

 

p.s.

kad izmocīju vienu rindu (tas variants man neder, bet es vismaz apgāju iepriekšējo erroru) tad dabūju ORA-01861: literal does not match format string lai gan es padevu 10 simbolus - 04.04.2008 un specificētais formāts bija 'dd.mm.yyyy'. wtf?

Edited by macho
Link to comment
Share on other sites

es vislaik pieeju tam visam ar tādu kā programmētāja pieeju un nesaprotu, kas šajā situācijā jādara

Ja tā būtu taisnība, tad tu saprastu, ka subkverijs:

select dbms_lob.substr(new_state, 10,479) from TABULA

 

Nedrīkst atgriezt vairāk par vienu rindu.

Link to comment
Share on other sites

nu a kā lai es uztaisu, lai viņš atgriež vienu rindu? Es tak tos eskūella prikolus nezinu

 

p.s.

kā jau teicu - kad uzlieku lai atgriež vienu rindu, tad met to otru erroru ārā.

 

p.p.s

ak jā, es jau te ņemoties biju aizmirsis ka sākumā bija vienkārši

and  to_date(dbms_lob.substr(new_state, 10,479), 'dd.mm.yyyy') > to_date(log_date, 'dd.mm.yyyy')

 

bet tad meta to ORA-01861: literal does not match format string ārā

 

ā. man tikko aizgāja. šas pārbaudīšu vai viss ok.

Edited by macho
Link to comment
Share on other sites

A kāpēc vispār tev vajag to subselektu ? Tu taču selektē no vienas un tās pašas tabulas. (Tagad skaidrs, paspēji izlabot)

 

Esi pārliecināts, ka

dbms_lob.substr(new_state, 10,479)

atgriež pareizo stringu. Pēdējos parametrus vietām nejauc ?

Edited by andrisp
Link to comment
Share on other sites

es esmu stulbs :(

 

es neiedomājos pārbaudīt vai (dbms_lob.substr(new_state, 10,479)) vienmēr atgriež datumu.

 

ir arī gadījumi kad ir tukšumi vai citādi sūdi.

 

respektīvi man vajag uzlikt pirms tam nosacījumu ja (dbms_lob.substr(new_state, 10,479)) IR DATUMISKS.

 

ok, tagad met laukā tikai datumus, bet skāde tāda, ka joprojām tas errors literal does not match format string. Kas ir dīvaini... jo bez šitā parametra man atgriež tikai datumus...

Edited by macho
Link to comment
Share on other sites

provēju gan šitā

and  to_date(decode(dbms_lob.substr(new_state, 10,479), '=', '01.01.1990', dbms_lob.substr(new_state, 10,479)),
'dd.mm.yyyy') > to_date(log_date, 'dd.mm.yyyy')

 

gan šitā

and  dbms_lob.substr(new_state, 1,481) ='.'
and  dbms_lob.substr(new_state, 1,484) ='.'
to_date(dbms_lob.substr(new_state, 10,479),  'dd.mm.yyyy') > to_date(log_date, 'dd.mm.yyyy')

 

abos met ārā ORA-01861: literal does not match format string

 

tam to_date vispār var padot kaut ko citu izņemot stringu rakstītu pēdiņās?

 

ok, izdevās, problēma izrādās bija ar log_date.

Edited by macho
Link to comment
Share on other sites

×
×
  • Create New...