CaptureRange
CaptureRange(first DOUBLE, last DOUBLE, xml_column TEXT, item_id INT)
Tai SQL funkcija, naudojama paieškai lentelės laukuose, kur duomenys yra saugomi XML formatu. Ji patikrina ar lentelės įrašo XML duomenų stulpelyje skaičius yra nurodytame intervale, pvz. [1988; 2009].
Panaudojimas
Sakykime, kad turime lentelės įrašą, kurio xml stulpelyje laikoma tokia tekstinė eilutė:
<item id="1">12</item>
<item id="2">1988</item>
<item id="3">3.14</item>
<item id="2">1988</item>
<item id="3">3.14</item>
Ši užklausa grąžina teigiamą reikšmę, nes 1988 yra daugiau nei 1980 ir mažiau nei 2009:
SELECT CaptureRange(1980, 2009, xml, 2)
Ši užklausa grąžina neigiamą reikšmę, nes 1988 yra mažiau nei 1995 ar 2009:
SELECT CaptureRange(1995, 2009, xml, 2)
Kodas
CREATE FUNCTION CaptureRange (first DOUBLE, last DOUBLE, xml_column TEXT, item_id INT)
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
DECLARE numberStart INT;
DECLARE numberEnd INT;
DECLARE thisNumber DOUBLE;
DECLARE phrase TEXT;
DECLARE phraseLength INT;
DECLARE thisResult BOOLEAN;
SET phrase = CONCAT(‘<item id="’, item_id, ‘">’); – Kuriame eilutę su atidaryta XML žyme
SET numberStart = LOCATE(phrase, xml_column) + CHAR_LENGTH(phrase); – Ieškome vietos kur baigiasi atidaroma žymė
IF numberStart THEN – Don’t waste time if the opening tag was not found
SET numberEnd = LOCATE(‘</item>’, xml_column, numberStart) – numberStart; – Ieškome XML žymės uždarymo (čia baigiasi skaičius)
SET thisNumber = SUBSTRING(xml_column, numberStart, numberEnd); – Nuskaitome skaičių
IF thisNumber >= first AND thisNumber <= last THEN SET thisResult = TRUE; – Vykdomas patikrinimas, ar skaičius yra intervale
ELSE SET thisResult = FALSE;
END IF;
END IF;
RETURN thisResult;
END
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
DECLARE numberStart INT;
DECLARE numberEnd INT;
DECLARE thisNumber DOUBLE;
DECLARE phrase TEXT;
DECLARE phraseLength INT;
DECLARE thisResult BOOLEAN;
SET phrase = CONCAT(‘<item id="’, item_id, ‘">’); – Kuriame eilutę su atidaryta XML žyme
SET numberStart = LOCATE(phrase, xml_column) + CHAR_LENGTH(phrase); – Ieškome vietos kur baigiasi atidaroma žymė
IF numberStart THEN – Don’t waste time if the opening tag was not found
SET numberEnd = LOCATE(‘</item>’, xml_column, numberStart) – numberStart; – Ieškome XML žymės uždarymo (čia baigiasi skaičius)
SET thisNumber = SUBSTRING(xml_column, numberStart, numberEnd); – Nuskaitome skaičių
IF thisNumber >= first AND thisNumber <= last THEN SET thisResult = TRUE; – Vykdomas patikrinimas, ar skaičius yra intervale
ELSE SET thisResult = FALSE;
END IF;
END IF;
RETURN thisResult;
END
Pastaba: Ši SQL funkcija netinka paieškoje tarp daug įrašų, nes yra pernelyg lėta.
Blogo kategorijos
- Ambicijos
- Aparatinė įranga
- Atradimai
- Eismas
- Finansai
- Gyvenimas
- Hobis
- Humoras
- Kelionės
- Kinas
- Komiksai
- Kritika
- Laisvalaikis
- Muzika
- Produktyvumas
- Programavimas
- Programinė įranga
- Studijos
- Susierzinimas
- Tinklalapių kūrimas
- Žaidimai
Naudingos nuorodos
vCard