.SQL Server中 image类型数据的比较
2024-08-26 03:29:59
在SQL Server中如果你对text、ntext或者image数据类型的数据进行比较。将会提示:不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。不过image也是不支持like比较的。
那怎么样对数据库中的图片做比较呢。
对于这种大型对象的处理,在Oracle中有有专门的函数DBMS_LOB.COMPARE,而SQLSERVER中没有专门的处理函数,
只能通过使用substring函数一段一段的从image数据中截取放到varbinary类型数据,最长8060字节(8k),
然后再对varbinary类型数据进行比较。以下是一个比较image的函数例子:
那怎么样对数据库中的图片做比较呢。
对于这种大型对象的处理,在Oracle中有有专门的函数DBMS_LOB.COMPARE,而SQLSERVER中没有专门的处理函数,
只能通过使用substring函数一段一段的从image数据中截取放到varbinary类型数据,最长8060字节(8k),
然后再对varbinary类型数据进行比较。以下是一个比较image的函数例子:
注意:局部变量的类型是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型,请在查询中直接使用。
/****** Object: UserDefinedFunction [dbo].[FuncCompareImage] Script Date: 2016-09-01 11:18:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FuncCompareImage] ( @a1 IMAGE, @a2 IMAGE )
RETURNS INT
-- if match, return 1
AS
BEGIN
DECLARE @n INT ,
@i INT ,
@j INT;
DECLARE @b1 VARBINARY(8000) ,
@b2 VARBINARY(8000);
SET @n = 1;
IF DATALENGTH(@a1) <> DATALENGTH(@a2) -- different length
SET @n = 0;
ELSE
BEGIN
SET @i = 0;
SET @j = ( DATALENGTH(@a1) - 1 ) / 8000 + 1;
WHILE @i <= @j
BEGIN
SET @b1 = SUBSTRING(@a1, @i * 8000 + 1,
CASE @i
WHEN @j
THEN DATALENGTH(@a1) % 8000
ELSE 8000
END);
SET @b2 = SUBSTRING(@a2, @i * 8000 + 1,
CASE @i
WHEN @j
THEN DATALENGTH(@a2) % 8000
ELSE 8000
END);
IF @b1 <> @b2
BEGIN
SET @n = 0;
BREAK;
END;
SET @i = @i + 1;
END;
END;
RETURN(@n);
END;
最新文章
- Testing - 测试基础 - 方法
- R语言中的循环函数(Grouping Function)
- [C/C++基础] C语言常用函数strlen的使用方法
- 把excel中的数据导入到数据库
- 初学Java之Pattern与Matcher类
- websocket++编译过程
- 你真的了解javascript吗
- IDE开发<;LER-Studio>;(1)::UI设计
- csu 10月 月赛 B 题 Scoop water
- Camera.ScreenPointToRay 解析
- 嵌入式GCC笔记
- DSL 系列(1) - 扩展点的论述与实现
- context日志
- sql 时间转换格式 convert(varchar(10),字段名,转换格式)
- [POI2011]Śmieci
- [LeetCode&;Python] Problem 697. Degree of an Array
- POI导出大量数据的简单解决方案
- Logstash中如何处理到ElasticSearch的数据映射
- vmrun命令
- CentOS7无法使用tab补全功能??