Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Firebird Π Π£ΠšΠžΠ’ΠžΠ”Π‘Π’Π’Πž Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ БАЗ ДАННЫΠ₯Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 38

Автор Π₯Π΅Π»Π΅Π½ Π‘ΠΎΡ€Ρ€ΠΈ

MINUTE

SMALLINT

0-59

Допустимо

НС допустимо

Допустимо

SECOND

DECIMAL(6,4)

0-59.9999

Допустимо

НС допустимо

Допустимо

WEEKDAY

SMALLINT

0-6*

Допустимо

Допустимо

НС допустимо

YEARDAY

SMALLINT

1-366

Допустимо

Допустимо

НС допустимо

* 0 = Π²ΠΎΡΠΊΡ€Π΅ΡΠ΅Π½ΡŒΠ΅ ... 6 = суббота.


ОбъСдинСниС EXTRACT() с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями

Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ EXTRACT() Π²Π½ΡƒΡ‚Ρ€ΠΈ CAST() для получСния прСдставлСний Π΄Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ использованиСм ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.


ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Π΅Π· Π΄ΠΎΠ»Π΅ΠΉ сСкунды

Π₯отя Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ прямым ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Π΅Π· Π΄ΠΎΠ»Π΅ΠΉ сСкунды, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано ΠΏΡ€ΠΈ использовании выраТСния, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CAST() ΠΈ EXTRACT().


Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° большС Π½ΡƒΠΆΠ½Π° Π² Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ 1, Ρ‡Π΅ΠΌ Π² Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ 3. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ экстраполирована Π½Π° любой Ρ‚ΠΈΠΏ Π΄Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 3, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ врСмя дня Π² Π²ΠΈΠ΄Π΅ строки.

Ѐункция EXTRACT() Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² значСния SMALLINT. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ выдСляСт элСмСнты Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· столбца Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 1 DATE с ΠΈΠΌΠ΅Π½Π΅ΠΌ CAPTURE_DATE ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² CHAR (13), имитируя стандартный Π² Firebird Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 'HH:MM:ss.nnnn'.


SET TERM ^;

CREATE TRIGGER BI_ATABLE FOR ATABLE

ACTIVE BEFORE INSERT POSITION 1

AS

BEGIN

IF (NEW.CAPTURE_DATE IS NOT NULL) THEN

BEGIN

NEW. CAPTURE_TIME =

CAST(EXTRACT (HOUR FROM NEW.CAPTUEE_DATE) AS CHAR(2)) || ':' ||

CAST(EXTRACT (MINUTE FROM NEW.CAPTURE_DATE) ASCHAR(2)) || ':' ||

CAST(EXTRACT (SECOND FROM NEW.CAPTURE_DATE) AS CHAR(7));

END

END ^

SET TERM ; ^


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСобразования Ρ‚ΠΈΠΏΠ° Π΄Π°Ρ‚Π°/врСмя

Π‘Ρ‚Ρ€ΠΎΠΊΠ° CHAR (13), сохраняСмая Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ "повСдСния," Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ TIME Π² Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ 3. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈ простом ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ‚ΠΈΠΏ TIME Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 3 ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 3.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ добавляСм Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ столбСц Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для хранСния ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:


ALTER TABLE ATABLE

ADD TIME_CAPTURE TIME;

COMMIT;


Π—Π°Ρ‚Π΅ΠΌ заполняСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ столбСц строкой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, выполняя ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ 1:


UPDATE ATABLE

SET TIME_CAPTURE = CAST (CAPTURE_TIME AS TIME)

WHERE CAPTURE_TIME IS NOT NULL;

COMMIT;


Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, - это Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π² нашСм Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π΅ ссылку Π½Π° строку Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° 1. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ зависимости ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ старой строки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.


SET TERM ^;

RECREATE TRIGGER BI_ATABLE FOR ATABLE

ACTIVE BEFORE INSERT POSITION 1

AS

BEGIN

/* Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выполняСтся */

END ^

SET TERM ;^

COMMIT;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старый столбСц CAPTURE_TIME:

ALTER TABLE ATABLE DROP CAPTURE_TIME;

COMMIT;

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ ΠΎΠΏΡΡ‚ΡŒ, Π½Π° этот Ρ€Π°Π· ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ TIME:

ALTER TABLE ATABLE

ADD CAPTURE_TIME TIME;

COMMIT;

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ столбца Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ столбСц

CAPTURE_TIME:

UPDATE ATABLE

SET CAPTURE_TIME = TIME_CAPTURE

WHERE TIME_CAPTURE IS NOT NULL;

COMMIT;

Π£Π΄Π°Π»ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ столбСц:

ALTER TABLE ATABLE DROP TIME_CAPTURE;

COMMIT;

Под ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ записывал Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ CAPTURE_TIME ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ TIME:

SET TERM ^;

RECREATE TRIGGER BI_ATABLE FOR ATABLE

ACTIVE BEFORE INSERT POSITION 1

AS

BEGIN

IF (NEW.CAPTURE_DATE IS NOT NULL) THEN

BEGIN

NEW.CAPTURE_TIME = CAST (NEW.CAPTURE.DATE AS TIME);

END

END ^

SET TERM ;^

COMMIT;


ВсС эти шаги ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π² скриптС SQL. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ использования скриптов SQL см. Π² Ρ€Π°Π·Π΄. "Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ схСмы" Π³Π»Π°Π²Ρ‹ 14.

ПониманиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ EXTRACT()

Ѐункция EXTRACT() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ пустой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² простых запросах для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия NOT NULL ΠΈΠ»ΠΈ Π² выраТСниях подзапросов ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° Π΄Π°Ρ‚Π°/врСмя. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… соСдинСниях это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ просто, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ внСшнСго соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ условиям послСднСго, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ NULL Π² Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… полях.

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подзапрос (см. Π³Π»Π°Π²Ρ‹ 21 ΠΈ 22), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… значСниях. Π’ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ 3 Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ CASE (см. Π³Π»Π°Π²Ρƒ 21) для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π° EXTRACT() ΠΏΡ€ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π΄Π°Ρ‚Π°Ρ….


ΠŸΠΎΡ€Π° дальшС

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‚Π΅ΠΌΡƒ использования ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… (строковых) Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Firebird, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы опрСдСлСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ символов ΠΈ порядком сортировки для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ столбцов.


ГЛАВА 11. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Firebird ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ (строковыС) Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… фиксированной ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ для локального использования Π² любом Π½Π°Π±ΠΎΡ€Π΅ символов, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΌ ΠΈΠ· большого списка. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ фиксированной Π΄Π»ΠΈΠ½Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 32 767 Π±Π°ΠΉΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹; для Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ этот ΠΏΡ€Π΅Π΄Π΅Π» ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ сохранСнии строки содСрТат счСтчик символов.

Firebird Ρ…Ρ€Π°Π½ΠΈΡ‚ строки ΠΎΡ‡Π΅Π½ΡŒ экономно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°ΠΆΠ΅ Ссли это Ρ‚ΠΈΠΏ CHAR ΠΈΠ»ΠΈ NCHAR. Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большой строковый столбСц, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ сущСствуСт мноТСство ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ строки - ограничСния клиСнтской памяти ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² индСкса, Π° для Firebird 1.0.x Π΅Ρ‰Π΅ ΠΈ дСкомпрСссия строк фиксированной ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚ сСрвСр.

ΠžΡΠ½ΠΎΠ²Ρ‹ использования строк

Атрибут ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² CHARACTER SET Π²Π°ΠΆΠ΅Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для совмСстимости с интСрфСйсом Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° столбца. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ нСсколько Π±Π°ΠΉΡ‚ΠΎΠ² для хранСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа- ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ Π² Firebird. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ символов, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π² Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°.


! ! !

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. Атрибут CHARACTER SET Π² объявлСнии являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ символов Π½Π΅ опрСдСляСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ столбца, Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ CHARACTER SET устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° символов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ опрСдСлСния Π½Π°Π±ΠΎΡ€Π° символов для столбцов ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… обсуТдаСтся Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅.

. ! .


ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° помСщСния Π² строковый столбСц Firebird строки с Π΄Π»ΠΈΠ½ΠΎΠΉ, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ пСрСполнСния.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ строки

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΌ строк Π² Firebird являСтся символ ASCII 39, ΠΈΠ»ΠΈ одиночная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°, ΠΈΠ»ΠΈ апостроф, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

StringVar = 'This is a string.';


Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ вовсС Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ для ограничСния строк. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ это, Ссли ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚Π΅ΡΡŒ с Π‘Π” Firebird, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ΄ прилоТСния, написанного для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… InterBase 5, Π³Π΄Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² качСствС ограничитСля строк. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ исправлСны Ρ‚Π°ΠΊΠΆΠ΅ Π² исходном ΠΊΠΎΠ΄Π΅ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… InterBase 5, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Firebird.

ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ

Firebird ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартный Π² SQL символ для ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ (соСдинСния) строк: Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ символ ASCII с ΠΊΠΎΠ΄ΠΎΠΌ 124, извСстный ΠΊΠ°ΠΊ двойная Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° (||). Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ строковых констант, строковых Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ/ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбцов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

MyBiggerString = 'You are my sunshine, ' || FirstName || ' my only sunshine.';

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ с числами ΠΈ числовыми выраТСниями для получСния Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… строк. НапримСр, для ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ символа '#' с Ρ†Π΅Π»Ρ‹ΠΌ:

NEW.TICKET_NOMBER = '#' || NEW.PK_INTEGER;


! ! !

Π’ΠΠ˜ΠœΠΠΠ˜Π•! He ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ выраТСния ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ любой ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, содСрТащСй NULL, Π±ΡƒΠ΄Π΅Ρ‚ NULL.

. ! .


Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Firebird Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ использованиС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π² строковыС поля. ЕдинствСнным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся "Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" символа апострофа (ASCII 39) для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Π³ΠΎ Π² качСствС Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ символа ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ограничитСля строки:

. . .

SET HOSTELRY = 'О''Flaherty''s Pub'

. . .

Π’ строках ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна функция UDF Asciichar (ascii_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ib udf, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² строки Ρ‚Π°ΠΊΠΈΠ΅ символы ΠΈΠ»ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ мноТСство тСкстовых ΠΏΠΎΠ»Π΅ΠΉ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ внСшний Ρ„Π°ΠΉΠ» - с символами Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки Π² послСднСм ΠΏΠΎΠ»Π΅:

INSERT INTO EXTFILE(DATA1, DATA1, DATA3, CRLF)

VALUES ('String1', 'String2', 'String3', Ascii_Char(13) || Ascii_Char(10));


По ΠΏΠΎΠ²ΠΎΠ΄Ρƒ объявлСния Asciichar (..) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ib udf смотритС Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ../UDF Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ инсталляции Firebird скрипт с ΠΈΠΌΠ΅Π½Π΅ΠΌ ib udf.sql. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… функциях см. Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²


ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² символов

Π’Π°ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² курсС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ символов Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ тСкстовых элСмСнтов, особСнно ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. НапримСр, Π² Π½Π°Π±ΠΎΡ€Π΅ символов UNICODE FSS Π΄Π°ΠΆΠ΅ 256-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ столбСц Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ больший Ρ€Π°Π·ΠΌΠ΅Ρ€ - ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ 770 Π±Π°ΠΉΡ‚- ΠΊΠ°ΠΊ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для поиска. Π”Π°Π»ΡŒΡˆΠ΅ Π² этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ сказано ΠΎΠ± остороТности, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒ, Ρ€Π΅ΡˆΠ°Ρ вопрос ΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ тСкстов для ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² символов.