DECLARE @ptrval varbinary(16) SELECT @ptrval = TEXTPTR(xingbi) FROM table1 where name='营业税' READTEXT table1.xingbi @ptrval 1 25 GO
你这name用text?大炮打苍蝇呢?
SQL SERVER手册有详细说明啊: 检索 ntext、text 或 image 值 可通过以下方式检索 ntext、text 或 image 值: 在 SELECT 语句中引用该列。 例如,以下查询将返回每个出版商在 pr_info 列中的所有信息:USE pubs SELECT pr_info FROM pub_info这是在使用 API(例如 ADO、OLE DB、ODBC 或 DB-Library)的数据库应用程序中所使用的方法。该列被绑定到一个程序变量上,然后使用特殊的 API 函数或方法逐块检索数据。如果在 Transact-SQL 脚本、存储过程和触发器中使用这种方法,则只能用于相对较短的值。如果数据的长度大于 SET TEXTSIZE 中指定的长度,则必须增大 TEXTSIZE 或使用其它方法。当前的 TEXTSIZE 设置通过 @@TEXTSIZE 函数报告,并使用 SET TEXTSIZE 语句进行更改:SET TEXTSIZE 64512TEXTSIZE 的默认设置为 4096 (4 KB)。以下语句将 TEXTSIZE 重置为默认值:SET TEXTSIZE 0如果数据长度小于 TEXTSIZE,则将返回所有数据。DB-Library API 还支持 dbtextsize 参数,该参数可控制可以选择的 ntext、text 和 image 数据的长度。用于 SQL Server 的 Microsoft OLE DB 提供程序和 SQL Server ODBC 驱动程序自动将 @@TEXTSIZE 设置为最大值 2 GB。使用 TEXTPTR 函数可获得传递给 READTEXT 语句的文本指针。 READTEXT 语句用于读取 ntext、text 或 image 数据块。例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):USE pubs DECLARE @textpointer varbinary(16) SELECT @textpointer = TEXTPTR(pr_info) FROM pub_info READTEXT pub_info.pr_info @textpointer 1 25使用 SUBSTRING 函数可检索从列开头特定偏移位置开始的数据块。 例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):USE pubs SELECT SUBSTRING(pr_info, 1, 25) AS pr_info FROM pub_info使用 PATINDEX 函数可检索一些特定字节组合的偏移量。 然后可以在 SUBSTRING 函数或 READTEXT 语句中使用该值检索数据。例如,以下查询将在 pub_info 表的 pr_info 列中搜索 Germany 字符串,并返回起始位置 103(字符串 Germany 的 G 在 pr_info 列的第 103 个字符处开始):USE pubs SELECT PATINDEX('%Germany%', pr_info) AS pr_info FROM pub_infoPATINDEX 只在文本和字符数据类型上操作;它不接受image 值。检索 ntext、text 或 image 的各部分值 这些方法不局限于检索从第一个字节开始的整个 ntext、text 或 image 值。可以将这些方法组合起来进行更灵活的处理,检索 ntext、text 或 image 值的不同部分。例如,以下 SELECT 语句将检索 text 值的起始标记和结束标记之间的部分:USE Northwind GO CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT) GO INSERT INTO TextParts VALUES( 1, 'Sample string START TAG What I want END TAG Trailing text.') GO SELECT SUBSTRING( ColB, /* Calculate start as start of tag + tag length. */ (PATINDEX('%START TAG%', ColB) + 10), /* Calculate SUBSTRING length as end - start. */ ( PATINDEX('%END TAG%', ColB) - ( PATINDEX('%START TAG%', ColB) + 10 ) ) ) FROM TextParts GO下面是结果集:------------------------ What I want(1 row(s) affected)
drop table #test GO create table #test ( nam text not null, age int NOT NULL, abc text NOT NULL, def int NOT NULL ) GO insert into #test values(N'舞厅', 2,N'营业税', 3) insert into #test values(N'雷鸣', 3, N'营业税', 4) GO select nam COLLATE Chinese_PRC_CI_AS from #test where abc like N'营业税'
SELECT @ptrval = TEXTPTR(xingbi)
FROM table1 where name='营业税'
READTEXT table1.xingbi @ptrval 1 25
GO
检索 ntext、text 或 image 值
可通过以下方式检索 ntext、text 或 image 值: 在 SELECT 语句中引用该列。
例如,以下查询将返回每个出版商在 pr_info 列中的所有信息:USE pubs
SELECT pr_info
FROM pub_info这是在使用 API(例如 ADO、OLE DB、ODBC 或 DB-Library)的数据库应用程序中所使用的方法。该列被绑定到一个程序变量上,然后使用特殊的 API 函数或方法逐块检索数据。如果在 Transact-SQL 脚本、存储过程和触发器中使用这种方法,则只能用于相对较短的值。如果数据的长度大于 SET TEXTSIZE 中指定的长度,则必须增大 TEXTSIZE 或使用其它方法。当前的 TEXTSIZE 设置通过 @@TEXTSIZE 函数报告,并使用 SET TEXTSIZE 语句进行更改:SET TEXTSIZE 64512TEXTSIZE 的默认设置为 4096 (4 KB)。以下语句将 TEXTSIZE 重置为默认值:SET TEXTSIZE 0如果数据长度小于 TEXTSIZE,则将返回所有数据。DB-Library API 还支持 dbtextsize 参数,该参数可控制可以选择的 ntext、text 和 image 数据的长度。用于 SQL Server 的 Microsoft OLE DB 提供程序和 SQL Server ODBC 驱动程序自动将 @@TEXTSIZE 设置为最大值 2 GB。使用 TEXTPTR 函数可获得传递给 READTEXT 语句的文本指针。
READTEXT 语句用于读取 ntext、text 或 image 数据块。例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):USE pubs
DECLARE @textpointer varbinary(16)
SELECT @textpointer = TEXTPTR(pr_info)
FROM pub_info
READTEXT pub_info.pr_info @textpointer 1 25使用 SUBSTRING 函数可检索从列开头特定偏移位置开始的数据块。
例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):USE pubs
SELECT SUBSTRING(pr_info, 1, 25) AS pr_info
FROM pub_info使用 PATINDEX 函数可检索一些特定字节组合的偏移量。
然后可以在 SUBSTRING 函数或 READTEXT 语句中使用该值检索数据。例如,以下查询将在 pub_info 表的 pr_info 列中搜索 Germany 字符串,并返回起始位置 103(字符串 Germany 的 G 在 pr_info 列的第 103 个字符处开始):USE pubs
SELECT PATINDEX('%Germany%', pr_info) AS pr_info
FROM pub_infoPATINDEX 只在文本和字符数据类型上操作;它不接受image 值。检索 ntext、text 或 image 的各部分值
这些方法不局限于检索从第一个字节开始的整个 ntext、text 或 image 值。可以将这些方法组合起来进行更灵活的处理,检索 ntext、text 或 image 值的不同部分。例如,以下 SELECT 语句将检索 text 值的起始标记和结束标记之间的部分:USE Northwind
GO
CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT)
GO
INSERT INTO TextParts
VALUES( 1,
'Sample string START TAG What I want END TAG Trailing text.')
GO
SELECT SUBSTRING( ColB,
/* Calculate start as start of tag + tag length. */
(PATINDEX('%START TAG%', ColB) + 10),
/* Calculate SUBSTRING length as end - start. */
(
PATINDEX('%END TAG%', ColB) -
( PATINDEX('%START TAG%', ColB) + 10 )
)
)
FROM TextParts
GO下面是结果集:------------------------
What I want(1 row(s) affected)
GO
create table #test
(
nam text not null,
age int NOT NULL,
abc text NOT NULL,
def int NOT NULL
)
GO
insert into #test
values(N'舞厅', 2,N'营业税', 3)
insert into #test
values(N'雷鸣', 3, N'营业税', 4)
GO
select nam COLLATE Chinese_PRC_CI_AS from #test where abc like N'营业税'