首页 > 数据库 >SqlServer 带空格的字符串比较

SqlServer 带空格的字符串比较

时间:2023-07-27 20:14:17浏览次数:51  
标签:abc SqlServer ceshi bh 空格 字符串 WHERE SELECT

SqlServer 带空格的字符串比较

介绍

SqlServer 字符串比较,会匹配具有尾随空格的字符串

字符串比较规则

SQL Server 数据库引擎遵循有关如何比较包含空格的字符串的 ANSI/ISO SQL-92 规范(第 8.2 节“比较谓词”,第 3 条通用规则)。 ANSI 标准要求对比较中使用的字符串进行填充,以便在比较字符串之前匹配长度。 填充直接影响 WHEREHAVING 子句谓词的语义以及其他 Transact-SQL 字符串比较。 例如,对于大多数比较操作,Transact-SQL 将 'abc''abc ' 视为等效的字符串。 此规则的唯一例外是 LIKE 谓词。 如果 LIKE 谓词表达式的右侧具有尾随空格的值,则数据库引擎不会在进行比较之前将两个值填充到相同的长度。 原因在于,根据定义,LIKE 谓词旨在促进模式搜索而不是简单的字符串相等性测试,所以该谓词并未违反前面提到的 ANSI SQL-92 规范部分。

参考文档

字符串比较规则

示例

创建测试数据

create table #ceshi(bh varchar(10))
insert into #ceshi
  values('abc'), ('abc '), ('abc  ')

使用 = 查询

使用 = 查询,会匹配左右两侧具有尾随空格的值

SELECT * FROM #ceshi WHERE bh = 'abc'
SELECT * FROM #ceshi WHERE bh = 'abc '
SELECT * FROM #ceshi WHERE bh = 'abc  '

查询结果

| bh   |        
| ---- |
|abc|
|abc |
|abc  |

使用 like 查询

使用 like 查询,会匹配左侧具有尾随空格的值

SELECT * FROM #ceshi WHERE bh like 'abc'

查询结果

| bh   |        
| ---- |
|abc|
|abc |
|abc  |
SELECT * FROM #ceshi WHERE bh like 'abc '

查询结果

| bh   |        
| ---- |
|abc |
|abc  |
SELECT * FROM #ceshi WHERE bh like 'abc  '

查询结果

| bh   |        
| ---- |
|abc  |

获取具有尾随空格字符的长度

使用 LEN 获取的长度不含尾随空格, DATALENGTH 获取的长度含尾随空格

SELECT LEN(bh) as LEN_, DATALENGTH(bh) DATALENGTH_, * FROM #ceshi

查询结果

| LEN_ | DATALENGTH_ | bh   |
| ---- | ----------- | ---- |
| 3    | 3           |abc|
| 3    | 4           |abc |
| 3    | 5           |abc  |

使用 = 查询精确匹配

  1. 左右两侧增加字符的方式

    SELECT * FROM #ceshi WHERE bh + '|' = 'abc ' + '|'
    
  2. 使用DATALENGTH函数

    SELECT * FROM #ceshi WHERE bh = 'abc ' and DATALENGTH(bh) = DATALENGTH('abc ')
    

标签:abc,SqlServer,ceshi,bh,空格,字符串,WHERE,SELECT
From: https://www.cnblogs.com/txgh/p/17585886.html

相关文章

  • C#中将字符串分割成字符数组
    在C#中字符串类型String是由一系列的单个字符组合而成,其实可以通过字符串String对象ToCharArray()方法来将字符串中的元素逐一存在数据类型为Char的一维数组中。例如将字符str="ABCDEFG"分割为到一维数组可用下列语句:stringstr="ABCD";char[]strCharArr=str.ToC......
  • go语言语法 字符串查询
    Go语言语法字符串查询Go语言是一种编译型的静态类型语言,具有简洁的语法和强大的并发性能。在Go语言中,字符串是一种常见的数据类型,用于表示文本信息。在实际开发中,经常需要对字符串进行查询和操作。本文将介绍Go语言中的字符串查询操作,并通过代码示例演示其用法。字符串基础在Go......
  • java zip 字符串
    Java压缩和解压缩字符串在Java编程中,我们经常需要对数据进行压缩和解压缩操作。压缩可以减小数据的大小,便于存储和传输;解压缩则可以将压缩后的数据还原回原始状态。本文将介绍如何使用Java对字符串进行压缩和解压缩。1.使用Java的Zip压缩文件库Java提供了java.util.zip包,其中包......
  • java 地址截取域名字符串
    Java地址截取域名字符串在Java开发中,经常需要对URL进行处理,其中一个常见的需求是从完整的URL中提取出域名字符串。本文将介绍如何使用Java来截取域名字符串,并提供相关的代码示例。1.什么是域名?在互联网中,域名是用来标识互联网上的计算机或者网络服务的字符串。域名通常以点号......
  • java url空格转义
    Java中URL空格转义在Java中,URL(UniformResourceLocator)是用于定位资源的一种方式。当URL中包含空格字符时,需要将其进行转义,以确保URL的正确性。本文将介绍Java中如何进行URL空格转义,并提供相应的代码示例。什么是URL空格转义?URL中的空格字符在传输过程中会被编码为"%20",这是因......
  • java 实现接口 使整型和字符串比较大小
    Java实现接口:使整型和字符串比较大小在Java中,我们经常需要比较两个对象的大小。通常情况下,我们可以直接使用比较运算符(如>、<、==)来比较整型数据或字符串。然而,有时我们可能需要在比较过程中使用自定义的逻辑。为了实现这一点,我们可以使用接口来定义比较逻辑,并在需要的地方实现该......
  • mysql根据字符截取字符串
    mysql根据字符截取字符串(总结)1.1前言SUBSTRING_INDEX1.2需要实现的实际需求如下表为文档目录表,其中关键字段dir_seq为目录层级索引,dir_name为目录名称。假设现在我们获取到dir_seq值为.341.346.347.348.,现在我们想获取到各级别的目录主键。1.3截取一级目录主键步骤一:SUB......
  • java截取某个字符后面的字符串
    Java截取某个字符后面的字符串概述在Java中,如果我们需要截取某个字符后面的字符串,可以使用substring()方法。该方法允许我们从一个字符串中提取指定范围的子字符串。本文将介绍如何使用substring()方法来实现这一功能。步骤下面是实现截取某个字符后面的字符串的步骤:步骤......
  • QueryWrapper 查询数据库字段不为null和空字符串
    https://wenku.csdn.net/answer/50db66695ced42d380b982b85cd5fca7......
  • Python使用 - 字符串和二进制的转换
    字符串和二进制的转换,需要用到编码(比如:utf-8,gbk),它起到的主要作用:1)字符转二进制时:根据字符,去编码表查询该字符的二进制值2)二进制转字符时:根据二进制值,去编码表查询该二进制对应的字符 #字符转二进制,也叫编码str_bytes="123abc中文".encode("gbk")print(type(str......