|
UPDATE FILEA a SET (a.Field1, a.Field2) =
(
SELECT b.Field1,b.Field2
FROM FILEB b
WHERE SUBSTR(DIGITS(a.RUNDAT)) = b.WKEDAT
)
WHERE EXISTS
(
SELECT 1
FROM FILEB b
WHERE SUBSTR(DIGITS(a.RUNDAT)) = b.WKEDAT
)
For this kind of update, you need to have 1-to-1 match on dates. If there
ever is 1-to-many, you'll need to further enhance your WHERE clause to
ensure your natural key guarantees uniqueness.
Also, are all values (century,year,month,day) guaranteed to have 2 digit
representations? For example, is January represented as 01 or 1?
Above listed join assumes a 2 digit match.
Elvis
-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx
[mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Rowe, Sheri
Sent: Wednesday, November 29, 2006 1:56 PM
To: midrange-l@xxxxxxxxxxxx
Subject: Another SQL question
Hi,
After I sent this out, my boss decided to change the file I am trying to
update from 8 A to 8 S, so now I just need to compare a 6S field to a 8
S field. (so I spend the remainder or yesterday and today converting
existing programs to fit this new format) I have VERY limited SQL
skills, so would appreciate some help with this.
FILEA is a data file, Date field is now 8 S CCYYMMDD format
FILEB is a calendar file, Date field is 6 S YYMMDD Format (Contains
Week end dates)
I need to update fields in FILEA.Field1, FILEA.Field2 from FILEB.Field1,
FILEB.Fiel2 if the date in field FILEA.RUNDAT exists in FILEB.WKEDAT.
Thanks.
Sheri
3. RE: Another SQL question. (Rick.Chevalier@xxxxxxxxxxxxxxx)
4. Re: Another SQL question. (Alfredo Delgado)
5. Re: Another SQL question. (rob@xxxxxxxxx)
7. Re: Another SQL question. (Alan Shore)
8. RE: Another SQL question. (Elvis Budimlic)
----------------------------------------------------------------------
message: 3
date: Tue, 28 Nov 2006 14:14:42 -0600
from: <Rick.Chevalier@xxxxxxxxxxxxxxx>
subject: RE: Another SQL question.
Sheri,
It's possible to compare them using DIGITS to convert the numeric date
to a character format. The dates must be in the same format though and
in YYMMDD format. If they are in MMDDYY format or the 8 byte date has 4
digit years you can't compare them. You can build a work date field
using concatenate but that can get kind of complex. Check the archives
for this list and the RPG list. Date comparison and conversion in SQL
comes up pretty frequently.
Rick
-----Original Message----- From: midrange-l-bounces@xxxxxxxxxxxx [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Rowe, Sheri Sent: Tuesday, November 28, 2006 1:57 PM To: midrange-l@xxxxxxxxxxxx Subject: Another SQL question. I need to update fields in FILEA based on a date comparison with FILEB. However, the date in FILEA is defined as 8A and the date in FILEB is defined as 6S. Is it possible to compare these fields even though they are not the same format? It's a one-time fix and I was hoping avoid writing a program. Thanks. Sheri Rowe Timex Canada
------------------------------ message: 4 date: Tue, 28 Nov 2006 15:14:57 -0500 from: Alfredo Delgado <adelgado@xxxxxxxxxxxxxxxxx> subject: Re: Another SQL question. Sheri, you can manipulate the values to compare them. Do you have sample data -- with datatypes -- you could share for further help? Thanks, Alfred Rowe, Sheri wrote:
I need to update fields in FILEA based on a date comparison with FILEB. However, the date in FILEA is defined as 8A and the date in FILEB is defined as 6S. Is it possible to compare these fields even though they are not the same format? It's a one-time fix and I was hoping avoid writing a program. Thanks. Sheri Rowe Timex Canada
------------------------------ message: 5 date: Tue, 28 Nov 2006 15:16:39 -0500 from: rob@xxxxxxxxx subject: Re: Another SQL question. Other than the dangers of assuming the century it can be done. Make sure you don't blank out values that are not in the other file. That's why I use the Inner Join.
CREATE TABLE ROB/TIMEXA
(DATE8 CHAR (8 ) NOT NULL WITH DEFAULT,
BIGSELLER CHAR (15 ) NOT NULL WITH DEFAULT)
INSERT INTO ROB/TIMEXA VALUES('20061110', 'ITEMA')
INSERT INTO ROB/TIMEXA VALUES('20061111', 'ITEMB')
INSERT INTO ROB/TIMEXA VALUES('20061112', 'ITEMC')
CREATE TABLE ROB/TIMEXB
(DATE6 CHAR (6 ) NOT NULL WITH DEFAULT,
BIGSELLER CHAR ( 15) NOT NULL WITH DEFAULT)
INSERT INTO ROB/TIMEXB VALUES('061111', 'ITEMQ')
select * from timexA
....+....1....+....
DATE8 BIGSELLER
20061110 ITEMA
20061111 ITEMB
20061112 ITEMC
select * from timexB
....+....1....+..
DATE6 BIGSELLER
061111 ITEMQ
(Note: Your date formats may differ. Like, DATE6 may be MMDDYY and not
YYMMDD.)
UPDATE timexa a
SET bigseller =
(SELECT b.bigseller FROM timexB b
WHERE substr(a.date8,3,6) = b.date6
AND a.bigseller <> b.bigseller)
WHERE substr(a.date8,3,6) IN
(SELECT substr(a.date8,3,6) from timexa A
INNER JOIN timexb b
ON substr(a.date8,3,6)=b.date6
AND a.bigseller <> b.bigseller)
1 rows updated in TIMEXA in ROB.
select * from timexA
....+....1....+....
DATE8 BIGSELLER
20061110 ITEMA
20061111 ITEMQ
20061112 ITEMC
Rob Berendt
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.