F
Function to get zodiac sign for selected date.
DECLARE in_date CONSTANT DATE := TRUNC(SYSDATE); curr_sign VARCHAR2(30); -- FUNCTION get_zodiac ( in_date DATE ) RETURN VARCHAR2 AS mmdd CONSTANT CHAR(4) := TO_CHAR(in_date, 'MMDD'); BEGIN RETURN CASE WHEN mmdd BETWEEN '0321' AND '0420' THEN 'ARIES' -- beran WHEN mmdd BETWEEN '0421' AND '0521' THEN 'TAURUS' -- byk WHEN mmdd BETWEEN '0522' AND '0621' THEN 'GEMINI' -- blizenci WHEN mmdd BETWEEN '0622' AND '0722' THEN 'CANCER' -- rak WHEN mmdd BETWEEN '0723' AND '0823' THEN 'LEO' -- lev WHEN mmdd BETWEEN '0824' AND '0923' THEN 'VIRGO' -- panna WHEN mmdd BETWEEN '0924' AND '1023' THEN 'LIBRA' -- vahy WHEN mmdd BETWEEN '1024' AND '1122' THEN 'SCORPIO' -- stir WHEN mmdd BETWEEN '1123' AND '1221' THEN 'SAGITTARIUS' -- strelec WHEN mmdd BETWEEN '1222' AND '1231' THEN 'CAPRICORN' -- kozoroh WHEN mmdd BETWEEN '0101' AND '0120' THEN 'CAPRICORN' -- kozoroh WHEN mmdd BETWEEN '0121' AND '0219' THEN 'AQUARIUS' -- vodnar WHEN mmdd BETWEEN '0220' AND '0320' THEN 'PISCES' -- ryby END; END; BEGIN -- show all days with same zodiac sign from selected date FOR c IN ( SELECT TRUNC(SYSDATE) + LEVEL - 1 AS date_ FROM DUAL CONNECT BY LEVEL <= 31 ) LOOP IF curr_sign IS NULL THEN curr_sign := get_zodiac(c.date_); END IF; -- IF curr_sign = get_zodiac(c.date_) THEN DBMS_OUTPUT.PUT_LINE(TO_CHAR(c.date_, 'YYYY-MM-DD') || ' ' || get_zodiac(c.date_)); END IF; END LOOP; END; /
You can also create compatiblitity matrix bit using BITAND function:
WITH z (bit, name, from_mmdd, to_mmdd, partners) AS ( SELECT 1, 'ARIES', '0321', '0420', 16 + 256 FROM DUAL UNION ALL -- beran SELECT 2, 'TAURUS', '0421', '0521', 32 + 512 + 8 + 2048 FROM DUAL UNION ALL -- byk SELECT 4, 'GEMINI', '0522', '0621', 64 + 1024 FROM DUAL UNION ALL -- blizenci SELECT 8, 'CANCER', '0622', '0722', 128 + 2048 FROM DUAL UNION ALL -- rak SELECT 16, 'LEO', '0723', '0823', 1 + 256 FROM DUAL UNION ALL -- lev SELECT 32, 'VIRGO', '0824', '0923', 2 + 512 FROM DUAL UNION ALL -- panna SELECT 64, 'LIBRA', '0924', '1023', 4 + 1024 FROM DUAL UNION ALL -- vahy SELECT 128, 'SCORPIO', '1024', '1122', 8 + 2048 FROM DUAL UNION ALL -- stir SELECT 256, 'SAGITTARIUS', '1123', '1221', 1 + 16 FROM DUAL UNION ALL -- strelec SELECT 512, 'CAPRICORN', '1222', '1231', 2 + 128 FROM DUAL UNION ALL -- kozoroh SELECT 512, 'CAPRICORN', '0101', '0120', 2 + 128 FROM DUAL UNION ALL -- kozoroh SELECT 1024, 'AQUARIUS', '0121', '0219', 4 + 64 FROM DUAL UNION ALL -- vodnar SELECT 2048, 'PISCES', '0220', '0320', 8 + 128 FROM DUAL -- ryby ) SELECT z.name, MAX(CASE BITAND(z.partners, 1) WHEN 0 THEN NULL ELSE 'Y' END) AS aries, MAX(CASE BITAND(z.partners, 2) WHEN 0 THEN NULL ELSE 'Y' END) AS taurus, MAX(CASE BITAND(z.partners, 4) WHEN 0 THEN NULL ELSE 'Y' END) AS gemini, MAX(CASE BITAND(z.partners, 8) WHEN 0 THEN NULL ELSE 'Y' END) AS cancer, MAX(CASE BITAND(z.partners, 16) WHEN 0 THEN NULL ELSE 'Y' END) AS leo, MAX(CASE BITAND(z.partners, 32) WHEN 0 THEN NULL ELSE 'Y' END) AS virgo, MAX(CASE BITAND(z.partners, 64) WHEN 0 THEN NULL ELSE 'Y' END) AS libra, MAX(CASE BITAND(z.partners, 128) WHEN 0 THEN NULL ELSE 'Y' END) AS scorpio, MAX(CASE BITAND(z.partners, 256) WHEN 0 THEN NULL ELSE 'Y' END) AS sagittaurius, MAX(CASE BITAND(z.partners, 512) WHEN 0 THEN NULL ELSE 'Y' END) AS capricorn, MAX(CASE BITAND(z.partners, 1024) WHEN 0 THEN NULL ELSE 'Y' END) AS aquarius, MAX(CASE BITAND(z.partners, 2048) WHEN 0 THEN NULL ELSE 'Y' END) AS pisces FROM z GROUP BY z.name, z.bit ORDER BY z.bit;
Comments
Post a Comment