sqlserver 表中的数据存在空白字符串怎么处理
2018-01-11 14:51
381 查看
直接在库中更改数据库的语句为
UPDATE 表名SET 字段名1=RTRIM(字段名1) where 字段名1 like '% ';
函数TRIM()
LTRIM()即left-trim,把左边空格修剪掉。
RTRIM()即right-trim,把右边的空格修剪掉。
输出为:
输出为:
UPDATE 表名SET 字段名1=RTRIM(字段名1) where 字段名1 like '% ';
函数TRIM()
LTRIM()即left-trim,把左边空格修剪掉。
RTRIM()即right-trim,把右边的空格修剪掉。
declare @test_var1 varchar(60),@test_var2 varchar(60) set @test_var1=' Hello World ' set @test_var2=ltrim(@test_var1) print '---'+@test_var2+'---'
输出为:
---Hello World ---
declare @test_var1 varchar(60),@test_var2 varchar(60) set @test_var1=' Hello World ' set @test_var2=rtrim(@test_var1) print '---'+@test_var2+'---'
输出为:
--- Hello World---
问题解决方案 sqlserver是微软出的数据库软件,不太可能犯这种错误,所以很可能是sqlserver的设置导致出现这种问题。于是在网上搜索解决方案,搜索词类似于“sqlserver varchar auto trim”这种,找到了参考文献1-4。 参考文献中介绍的比较详细,这里就不细说原理了,主要是与sqlserver中的ANSI_PADDING命令有关系。参考文献4中介绍说这个命令只在创建表时生效,后面就不再改动,并且该命令只影响varchar,不会用nvarchar类型造成影响。 于是有了下面几种解决方法: 1)将数据库表列的类型由varchar改为nvarchar 2)重新创建表,创建表的同时设置ANSI_PADDING的值,但是如果表中有数据,这种方法就不是很好 3)写程序处理,例如写入数据库之前把字符串变为base64编码,从数据库中读出来时再解码。这种方法也存在一个历史数据的问题,因为历史数据没有编码,可以设置一个标志位或者标志字符串标识一下保存在数据库中的数据是否经过编码,这种做法稍微麻烦一些,但不会对数据库造成更改。 我最终采用的是第三种方法,就是在保存到数据库之前检查字符串末尾是否为空格,如果是空格,就加一个标志字符串( 要保证用户的输入中肯定不会出现标志字符串),从数据库中读出来后检查字符串结尾是否有标志字符串,如果有则将标志字符串去除。这种做法虽然麻烦,但是不用修改数据库,对历史数据也没有影响,可以暂时解决问题。 但是最好的解决方法是以后建数据库表时将varchar类型的列变为nvarchar,这样才能一劳永逸的解决问题。 参考文献 [1]http://techygypo.blogspot.jp/2011/06/auto-trimming-whitespace-removal-in-sql.html [2]http://www.sqlines.com/sql-server/ansi_padding [3]https://msdn.microsoft.com/en-us/library/ms187403.aspx [4]http://stackoverflow.com/questions/1571180/auto-trim-database-entries
相关文章推荐
- sqlserver 数据类型处理 字符串截取
- 数据清洗小记:分类进行字符串转日期(某日期字段存在多类格式处理)
- SqlServer:根据指定分隔符,把传入字符串分隔处理后,返回数据表,函数功能类似.NET的string.Split()
- Oracle中insert数据字符串自动添加空白
- SQLSERVER 函数--把拼接的字符串按照拼接字符分成表数据
- sqlserver 处理输入的xml数据的两种方式
- 同一列的多行字符串数据用SQL怎么转换成同一列的一行数据
- sqlserver 判断当前数据是否存在 不存在则插入
- oracle判断数据或字段是否存在处理
- c# 关于WCF 接口参数 为 xml 格式的 字符串(string) 的 数据 处理
- Objective-C几种字符串处理速度的测试数据
- Sqlserver常见字符串/日期处理函数
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- SQLServer中处理亿万级别的数据(历史数据)
- AJAX提交到Handler.ashx一般处理程序返回json数据 (字符串拼接方式)
- sql添加数据时如何处理字符串中的单引号
- 字符串处理://在母串中查找子串,只保留子串之后的数据
- JSON数据中存在单个转义字符“\”的处理方法
- DSOFramer控件文档上传到服务器处理页面后,怎么解析数据 <转>
- 并发问题,锁,怎么处理死锁,脏数据处理