Функции для работы с типами данных text и image (Transact-SQL)

Tsql теория > Функции для работы с типами данных text и image (Transact-SQL)
17.04.2013 11:05:33



Статья:

PATINDEX Для любого допустимого символьного или текстового типа данных возвращает начальную позицию первого вхождения шаблона в указанном выражении или нуль, если шаблон не найден.

PATINDEX ( '%pattern%' , expression )

 следующем примере производится поиск позиции, с которой начинается шаблон ensure в указанной строке столбца DocumentSummary в таблицеDocument.

USE AdventureWorks2012;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO 

В следующих примерах символы-шаблоны % и _ используются для поиска позиции, где в указанной строке (индекс начинается с позиции 1) начинается шаблон 'en', за которым следует один любой символ и 'ure':

  SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');

PATINDEX работает аналогично LIKE, то есть можно можно использовать любой из этих шаблонов. Нет необходимости заключать шаблон в символы процентов (%). PATINDEX('a%', 'abc') возвращает 1 и PATINDEX('%a', 'cba') возвращает 3.

В отличие от LIKE, PATINDEX возвращает позицию, аналогично CHARINDEX.

В.Использование предложения COLLATE в функции PATINDEX

Следующий пример показывает, как функция COLLATE явно определяет параметры сортировки при поиске в выражении.

USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;
GO

Г.Использование переменной для указания шаблона

В следующем примере значение передается параметру pattern с помощью переменной.

USE AdventureWorks2012; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) 
FROM Production.Document
WHERE DocumentNode = 0x7B40;
 
TEXTPTR Возвращает значение указателя текста, которое соответствует столбцу text, ntext или image в формате varbinary. Извлеченное значение указателя текста может быть использовано в инструкциях READTEXT, WRITETEXT и UPDATETEXT.
TEXTPTR ( column )

А.Использование TEXTPTR

На следующем примере показано, как использовать функцию TEXTPTR для нахождения столбца imagelogo, связанного с New Moon Books в таблицеpub_info базы данных pubs. Указатель на текст заносится в локальную переменную @ptrval.

USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(logo) 
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id 
   AND p.pub_name = 'New Moon Books'
GO

Б.Использование TEXTPTR с внутрирядным текстом

В SQL Server указатель на внутрирядный текст должен использоваться внутри транзакции, как показано в примере.

CREATE TABLE t1 (c1 int, c2 text)
EXEC sp_tableoption 't1', 'text in row', 'on'
INSERT t1 VALUES ('1', 'This is text.')
GO
BEGIN TRAN
   DECLARE @ptrval VARBINARY(16)
   SELECT @ptrval = TEXTPTR(c2)
   FROM t1
   WHERE c1 = 1
   READTEXT t1.c2 @ptrval 0 1
COMMIT

В.Возвращение текстовых данных

На следующем примере показано, как выбрать столбец pub_id и указатель на 16-байтовый текст столбца pr_info column из таблицы pub_info.

USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO
 
TEXTVALID  Функция text, ntext или image, которая проверяет, является ли указанный текстовый указатель действительным.
TEXTVALID ( 'table.column' ,text_ ptr )
В следующем примере возвращается информация о том, существует ли действительный текстовый указатель для каждого значения в столбце logoтаблицы pub_info.
USE pubs;
GO
SELECT pub_id, 'Valid (if 1) Text data' 
   = TEXTVALID ('pub_info.logo', TEXTPTR(logo)) 
FROM pub_info
ORDER BY pub_id;
GO