本篇文章给大家谈谈需要在SQLServer中透视字符串值,以及sql在数据透视表中的用法的知识点,同时本文还将给你拓展SQLServer批量替换语句在SQLSERVER中批量替换字符串的方法、sql-
本篇文章给大家谈谈需要在SQL Server中透视字符串值,以及sql在数据透视表中的用法的知识点,同时本文还将给你拓展SQL Server批量替换语句 在SQL SERVER中批量替换字符串的方法、sql-server – 为什么我们需要在SQL Server中重建和重组索引、sql-server – 为什么这些字符在SQL Server中都是相同的?、sql-server – 在SQL Server 2008中的符号之前的字符串中隔离一个子字符串等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 需要在SQL Server中透视字符串值(sql在数据透视表中的用法)
- SQL Server批量替换语句 在SQL SERVER中批量替换字符串的方法
- sql-server – 为什么我们需要在SQL Server中重建和重组索引
- sql-server – 为什么这些字符在SQL Server中都是相同的?
- sql-server – 在SQL Server 2008中的符号之前的字符串中隔离一个子字符串
需要在SQL Server中透视字符串值(sql在数据透视表中的用法)
我将表描述为:
Occupation String |Name String
带有值:
Developer | ADeveloper | BDesigner | XCoder | YCoder | Z
我需要以下数据透视格式的值:
Designer | Developer | Coder---------+-----------+-------- X | A | Y Null | B | Z
有人可以帮忙吗?
提前致谢
答案1
小编典典具有ROW_NUMBER()的基本PIVOT将为您完成以下任务:
SELECT [Developer], [Designer], [Coder]FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN FROM #temp) as tPIVOT ( MAX(Name) FOR Occupation IN ([Developer],[Designer],[Coder])) as pvt
输出:
Developer Designer CoderA X YB NULL Z
如果的数量Occupation
可能非常多,则您需要动态SQL:
DECLARE @columns nvarchar(max), @sql nvarchar(max)SELECT @columns = ( SELECT DISTINCT '',''+QUOTENAME(Occupation) FROM #temp FOR XML PATH(''''))SELECT @sql = N''SELECT ''+STUFF(@columns,1,1,'''')+''FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN FROM #temp) as tPIVOT ( MAX(Name) FOR Occupation IN (''+STUFF(@columns,1,1,'''')+'')) as pvt''EXEC sp_executesql @sql
注意: 我ORDER BY (SELECT NULL)
只是用来获得一些随机顺序。为此,最好使用一些实际字段。
SQL Server批量替换语句 在SQL SERVER中批量替换字符串的方法
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容)varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace
替换 text ntext 数据类型字段的语句
代码如下:
update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)),'原本内容','想要替换成什么')
方法二:(替换其他数据类型字段的语句,实际应用中不常见)
代码如下:
update [表名] set 字段名 = replace(与前面一样的字段名,'想要替换成什么')
以下是补充:
1。如何批量替换ntext字段里面的数据
问题描述:
我想把数据库中News表中的字段content中的一些字符批量替换。
我的content字段是ntext类型的。
我想替换的字段是content字段,我想把里面的jb51.cc替换成//jb51.cc,替换方法是:
update News
set content = replace(cast(content as varchar(8000)),
'jb51.cc',
'//jb51.cc')
2。如何批量替换varchar和nvarchar类型
varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。
update 表名
set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')
update 表名
set ntext类型字段名=replace(convert(nvarchar(4000),ntext类型字段名),'替换成的值')
不过上面的方法,对于text或ntext字段超过8000的时候就不能用了,一般可以用asp程序来实现,先读取内容替换后,保存到数据库中。
临时解决方法:就是在生成静态的时间,可以先替换再输出,这里有个貌似不错的解决方法了,大家可以看下一篇文件啊。
如果不熟悉sqlserver的朋友可以用软件来实现
sqlserver 数据库批量替换工具(数据库及文本文件查找替换) v1.0中文绿色版
sqlServer 数据库批量查找替换工具1.2 sql木马清除助手
sql-server – 为什么我们需要在SQL Server中重建和重组索引
>为什么我们需要在sql Server中重建和重组索引?
>当我们重建和重组时,内部会发生什么?
关于site的文章说:
Index should be rebuild when index fragmentation is great than 40%. Index should be reorganized when index fragmentation is between 10% to 40%. Index rebuilding process uses more cpu and it locks the database resources. sql Server development version and Enterprise version has option ONLINE,which can be turned on when Index is rebuilt. ONLINE option will keep index available during the rebuilding.
我无法理解这一点,虽然它说什么时候这样做,但我想知道为什么我们需要重建和重组索引?
解决方法
内部碎片是指索引页面上的可用空间百分比很高,这意味着sql Server在扫描索引时需要读取更多页面.
外部碎片是当索引的页面不再有序时,因此sql Server必须做更多工作,特别是在IO术语中读取索引.
如果您的索引过于分散,最多,您的查询效率会降低,但最坏的情况是,sql Server将停止一起使用索引,这意味着几乎所有查询都必须执行表扫描或聚簇索引扫描.这会伤害你的表现很多!
重新组织索引时,sql Server使用现有的索引页面,只是在这些年龄段上随机播放数据.这将缓解内部碎片,还可以消除少量的外部碎片.它比重建更轻量级操作,并且始终在线.
重建索引时,sql Server实际上会对索引的数据进行重新分配并使用一组新的索引页.这显然会减轻内部碎片和外部碎片,但是这是一个更重的操作,默认情况下会使索引脱机,尽管它可以作为在线操作执行,具体取决于您的sql Server版本和设置.
但是,重建之后请不要期望有0碎片.除非您使用MAXDOP查询提示,否则sql Server将并行化重建操作并且涉及的处理器越多,可能存在的碎片就越多,因为每个处理器或核心将单独重建其索引的部分或片段,而不考虑彼此.这是在最佳碎片级别和重建索引所花费的时间之间的权衡.对于接近0的碎片,使用MAXDOP 1并在TempDB中对结果进行排序.
sql-server – 为什么这些字符在SQL Server中都是相同的?
select nchar(65217) -- ﻁ select nchar(65218) -- ﻂ select nchar(65219) -- ﻃ select nchar(65220) -- ﻄ if nchar(65217) = nchar(65218) print 'equal' if nchar(65217) = nchar(65219) print 'equal' if nchar(65217) = nchar(65220) print 'equal'
基于transitive relation,这意味着sql Server认为它们都是相同的字符.
但是,在其他环境中,例如C#,它们并不相同.
我很困惑的是:
>字符串比较如何在sql Server中工作
>为什么比较在一台机器和一个平台上的行为不同,但环境不同
>这4个字符代表一个人类可理解的角色.为什么它们在Unicode字符映射中如此丰富?
这当然会带来巨大的问题,因为我正在开发一个文本处理应用程序,数据几乎来自任何地方,我需要在处理之前对文本进行规范化.
如果我知道差异的原因,我可能会找到一个解决方案来处理它.
谢谢.
解决方法
sql Server包括3大类排序规则:二进制,旧版和Windows.二进制类别中的排序规则(_BIN后缀)使用基础代码点进行比较,因此如果代码点不同于字符,则相等比较返回不相等. Legacy(sql_前缀)和Windows排序规则为更自然的字典规则提供排序和比较语义.这允许比较考虑大小写,重音,宽度和假名. Windows排序规则提供了更强大的单词排序规则,与Windows操作系统紧密结合,而旧排序规则只考虑单个字符.
下面的示例说明了Windows和二进制排序规则与Teth字符之间的区别:
CREATE TABLE dbo.WindowsColationExample ( Character1 nchar(1) COLLATE arabic_100_CI_AS_SC,Character2 nchar(1) COLLATE arabic_100_CI_AS_SC,Character3 nchar(1) COLLATE arabic_100_CI_AS_SC,Character4 nchar(1) COLLATE arabic_100_CI_AS_SC ); CREATE TABLE dbo.BinaryColationExample ( Character1 nchar(1) COLLATE arabic_100_BIN,Character2 nchar(1) COLLATE arabic_100_BIN,Character3 nchar(1) COLLATE arabic_100_BIN,Character4 nchar(1) COLLATE arabic_100_BIN ); INSERT INTO dbo.BinaryColationExample VALUES ( NCHAR(65217),NCHAR(65218),NCHAR(65219),NCHAR(65220) ); INSERT INTO dbo.WindowsColationExample VALUES ( NCHAR(65217),NCHAR(65220) ); --all characters compare not equal SELECT * FROM dbo.BinaryColationExample WHERE character1 = character2 OR character1 = character3 OR character1 = character4 OR character2 = character3 OR character2 = character4 OR character3 = character4; --all characters compare equal SELECT * FROM dbo.WindowsColationExample WHERE character1 = character2; SELECT * FROM dbo.WindowsColationExample WHERE character1 = character3; SELECT * FROM dbo.WindowsColationExample WHERE character1 = character4; SELECT * FROM dbo.WindowsColationExample WHERE character2 = character3; SELECT * FROM dbo.WindowsColationExample WHERE character2 = character4; SELECT * FROM dbo.WindowsColationExample WHERE character3 = character4;
关于为什么Unicode可能包含相同字形的不同代码点的原因在http://en.wikipedia.org/wiki/Duplicate_characters_in_Unicode中概述.我总结,它可能是为了遗留兼容性或字符在规范上不等同.请注意,Teth字符ط用于不同的语言(http://en.wikipedia.org/wiki/Teth).
sql-server – 在SQL Server 2008中的符号之前的字符串中隔离一个子字符串
Net Operating Loss - 2007 Capital Loss - 1991 Foreign Tax Credit - 1997
并想要年份和名称(连字符之前的子串)分开使用sql Server Management Studio 2008.任何建议?或想法如何实现这一点?
解决方法
DECLARE @test nvarchar(100) SET @test = 'Foreign Tax Credit - 1997' SELECT @test,left(@test,charindex('-',@test) - 2) AS LeftString,right(@test,len(@test) - charindex('-',@test) - 1) AS RightString
今天的关于需要在SQL Server中透视字符串值和sql在数据透视表中的用法的分享已经结束,谢谢您的关注,如果想了解更多关于SQL Server批量替换语句 在SQL SERVER中批量替换字符串的方法、sql-server – 为什么我们需要在SQL Server中重建和重组索引、sql-server – 为什么这些字符在SQL Server中都是相同的?、sql-server – 在SQL Server 2008中的符号之前的字符串中隔离一个子字符串的相关知识,请在本站进行查询。
本文标签: