接连分享了数据库平台的几套常用功能,有读者回应:这些简单的知识点是不是一直在折腾,有意思吗?敢来点高级的?读者有需求,怎么能不满足呢?但是大家明白我要说什么,所以我花了很多时间来做例子和演示,今天分享给大家。测试环境SQLServer2017CHARINDEX函数会在第二个字符表达式中搜索一个字符表达式,会返回第一个表达式的起始位置(如果发现存在)。语法CHARINDEX(expressionToFind,expressionToSearch[,start_location])注意:这是一个常用的字符搜索函数,起始下标为1,而不是0。如果加上起始下标,起始下标之前的字符将被忽略,并且搜索将向后执行。没有起始值的例子SELECTCHARINDEX('data','SQLdatabasedevelopmentSQLdatabasedevelopment')结果添加起始值的例子SELECTCHARINDEX('data','SQLdatabasedevelopmentSQLdatabasedevelopment',6)resultCONCAT_WS函数结束到返回一个字符串通过端到端连接或串联两个或多个字符串值生成。它使用第一个函数参数中指定的分隔符分隔连接的字符串值。(CONCAT_WS表示使用分隔符连接。)语法CONCAT_WS(separator,argument1,argument2[,argumentN]...)注意:CONCAT_WS忽略列中的NULL值。使用ISNULL函数包装可为空的列并提供默认值。示例SELECTCONCAT_WS('-','SQL','Database',NULL,'Development')结果:SOUNDEX函数返回一个四字符代码(SOUNDEX),用于评估两个字符串的相似性。语法SOUNDEX(character_expression)注意:SOUNDEX根据字符串的发音将字母数字字符串转换为四字符代码。代码的第一个字符是character_expression的第一个字符,转换为大写。代码的第二到第四个字符是代表表达式中字母的数字。字母A、E、I、O、U、H、W和Y将被忽略,除非它们是字符串的第一个字母。如果需要生成四字码,则在末尾补零示例SELECTSOUNDEX('liyue'),SOUNDEX('liyuee')结果:表示两个读音很接近DIFFERENCE函数返回一个整数值进行测量thedifferencebetweentwocharactersSOUNDEX()valuesbetweenthedifferencebetweentheSOUNDEX()valuesofexpressions语法DIFFERENCE(character_expression,character_expression)注意:DIFFERENCE比较两个不同的SOUNDEX值,返回一个整数值。该值衡量SOUNDEX值的匹配程度,范围为0到4。值为0表示SOUNDEX值之间的相似性较弱或不相似;4表示非常相似,甚至相同的SOUNDEX值。DIFFERENCE和SOUNDEX是排序敏感的。示例SELECTSOUNDEX('liyue'),SOUNDEX('liyuee'),DIFFERENCE('liyue','liyuee');结果:返回结果为4,进一步验证了我们之前的功能。FORMAT函数返回使用指定格式和可选区域性格式化的值。使用FORMAT函数将日期/时间和数值格式化为区域设置感知字符串。对于一般数据类型转换,请使用CAST或CONVERT。语法FORMAT(value,format[,culture])请注意,FORMAT将返回NULL错误而不是无效的culture。例如,如果格式中指定的值无效,则返回NULL。FORMAT函数是不确定的。FORMAT依赖于.NETFramework公共语言运行时(CLR)的存在。该函数不能被远程调用,因为它依赖于CLR的存在。需要CLR的远程处理功能可能会导致远程服务器出错。日期格式示例DECLARE@dDATETIME='12/18/2019';SELECTFORMAT(@d,'d','en-US')AS'美国格式',FORMAT(@d,'d','en-gb')AS'英国格式',FORMAT(@d,'d','de-de')AS'德语格式',FORMAT(@d,'d','zh-cn')AS'中文格式';SELECTFORMAT(@d,'D','en-US')AS'美国格式',FORMAT(@d,'D','en-gb')AS'英国格式',FORMAT(@d,'D','de-de')AS'德语格式',FORMAT(@d,'D','zh-cn')AS'中文格式';结果自定义格式示例SELECTFORMAT(GETDATE(),'dd/MM/yyyy','zh-cn')AS'自定义日期',FORMAT(123456789,'###-##-####')AS'自定义编号';结果值格式示例SELECTFORMAT(1.127456,'N','zh-cn')AS'四舍五入格式',FORMAT(1.123456,'G','zh-cn')AS'通用格式',FORMAT(1.123456,'C','zh-cn')AS'货币格式'结果PATINDEX返回指定表达式中模式第一次出现的起始位置,如果未在所有有效文本和字符数据类型中找到该模式,则返回零。此函数类似于CHARINDEX语法PATINDEX('%pattern%',expression)注意:如果pattern或expression为NULL,则PATINDEX返回NULL。PATINDEX的起始位置是1。PATINDEX根据输入的整理进行比较。要在指定的排序规则中进行比较,您可以使用COLLATE将显式排序规则应用于输入。示例SELECTPATINDEX('%database%','SQL数据库开发');ResultsusewildcardsinPATINDEXExample使用%和_wildcards在指定字符串中查找模式'number'的开头(后跟任意一个字符和'library')Position(索引从1开始)SELECTPATINDEX('%number_library%','SQL数据库开发');结果QUOTENAME函数返回带有分隔符的Unicode字符串,添加分隔符可以使输入字符串成为有效的SQLServer分隔标识符。语法QUOTENAME('character_string'[,'quote_character'])注意'character_string'是由Unicode字符数据组成的字符串。character_string是系统名称,最多可包含128个字符。超过128个字符的输入将返回NULL。'quote_character'用作定界符的单字符字符串。可以是单引号(')、左方括号或右方括号([])、双引号(")、左括号或右括号(())、大于号或小于号(><)、左大括号或右花括号大括号({})或反引号(`)。如果提供了不可接受的字符,则返回NULL。如果未指定quote_character,则使用方括号。示例SELECTQUOTENAME('abc[]def');REPLICATE函数重复字符串值指定的次数。语法(string_expression,integer_expression)示例SELECT'2'+REPLICATE('3',5)REVERSE函数返回字符串值的倒序。语法REVERSE(string_expression)示例SELECTREVERSE('SQL数据库开发')resultSTRING_AGG将字符串表达式的值串联起来,中间放置分隔符值。字符串末尾不能加分隔符。语法STRING_AGG(expression,separator)[
