原文:.SQL Server中 image类型数据的比较

在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的函数例子:
注意:局部变量的类型是任何由系统提供的或用户定义的数据类型。变量不能是 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;
 

最新文章

  1. Testing - 测试基础 - 方法
  2. R语言中的循环函数(Grouping Function)
  3. [C/C++基础] C语言常用函数strlen的使用方法
  4. 把excel中的数据导入到数据库
  5. 初学Java之Pattern与Matcher类
  6. websocket++编译过程
  7. 你真的了解javascript吗
  8. IDE开发&lt;LER-Studio&gt;(1)::UI设计
  9. csu 10月 月赛 B 题 Scoop water
  10. Camera.ScreenPointToRay 解析
  11. 嵌入式GCC笔记
  12. DSL 系列(1) - 扩展点的论述与实现
  13. context日志
  14. sql 时间转换格式 convert(varchar(10),字段名,转换格式)
  15. [POI2011]Śmieci
  16. [LeetCode&amp;Python] Problem 697. Degree of an Array
  17. POI导出大量数据的简单解决方案
  18. Logstash中如何处理到ElasticSearch的数据映射
  19. vmrun命令
  20. CentOS7无法使用tab补全功能??

热门文章

  1. BZOJ3577 : 玩手机
  2. BZOJ 2282 &amp; 树的直径
  3. js html5推送 实例
  4. c++ map删除元素
  5. HDU 4632 Palindrome subsequence(DP)
  6. Java学习第一步: Win7配置JDK环境
  7. state配置语言实战
  8. java---一元二次方程练习
  9. Symantec更新服务器
  10. Redis Sentinel哨兵集群