macho Posted March 13, 2008 Report Share Posted March 13, 2008 (edited) 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 March 13, 2008 by macho Link to comment Share on other sites More sharing options...
andrisp Posted March 13, 2008 Report Share Posted March 13, 2008 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 More sharing options...
macho Posted March 13, 2008 Author Report Share Posted March 13, 2008 (edited) 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 March 13, 2008 by macho Link to comment Share on other sites More sharing options...
andrisp Posted March 13, 2008 Report Share Posted March 13, 2008 (edited) 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 March 13, 2008 by andrisp Link to comment Share on other sites More sharing options...
macho Posted March 13, 2008 Author Report Share Posted March 13, 2008 (edited) 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 March 13, 2008 by macho Link to comment Share on other sites More sharing options...
macho Posted March 13, 2008 Author Report Share Posted March 13, 2008 (edited) 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 March 13, 2008 by macho Link to comment Share on other sites More sharing options...
Recommended Posts