首页
统计
留言
友链
壁纸
Search
1
Notion网页端汉化、主题修改
699 阅读
2
SnapicPlus主题添加视频功能以及使用外链详解、图片加载缓慢问题解决
543 阅读
3
Gravatar镜像源地址大全
503 阅读
4
typecho主题中文搜索404问题解决
500 阅读
5
Notion客户端中文安装
435 阅读
Web前端
ES6
Vue.js
Node.js
JavaScript
其他前端扩展
后端探索
数据库
服务器
小程序
手机端
奇技淫巧
成功之母
时光随笔
登录
Search
标签搜索
SQL
typecho
SqlServer
MySql
jQuery
JavaScript
npm
Gravatar
镜像
google
Java
包管理工具
前端
JS
node
数据库
Notion
BEGIN...END
EXECUTE
404
天祈
累计撰写
66
篇文章
累计收到
14
条评论
首页
栏目
Web前端
ES6
Vue.js
Node.js
JavaScript
其他前端扩展
后端探索
数据库
服务器
小程序
手机端
奇技淫巧
成功之母
时光随笔
页面
统计
留言
友链
壁纸
搜索到
9
篇与
的结果
2022-11-10
11. SQLServer : 运算符
运算符的优先级{callout color="#6eee5d"}如果一个表达式中的两个运算符有相同的优先级别,则按照它们在表达式中的位置对其从左到右进行求值。 例如,在下面的 SET 语句所使用的表达式中,在加运算符之前先对减运算符进行求值。{/callout}{alert type="info"} 级别 运算符 1 ~(位非) 2 *(乘)、/(除)、%(取模) 3 +(正)、-(负)、+(加)、+(串联)、-(减)、&(位与)、^(位异或)、|(位或) 4 =、><>=、<=、<>!=、!>!<(比较运算符) 5 NOT 6 AND 7 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME 8 =(赋值) {/alert}一元运算符{alert type="info"} 运算符 含义 +(正) 数值为正。 -(负) 数值为负。 ~(位非) 返回数字的非。 {/alert}集运算符使用说明{alert type="info"}UNION ALL - 包括重复行UNION - 排除重复行{/alert}基本规则{alert type="info"}所有查询中的列数和列的顺序必须相同。数据类型必须兼容{/alert}算数运算符{alert type="info"}declare @mm int =3; declare @nn int =4; declare @zz nvarchar(255) ='5'; select -@nn+@mm -- 输出:-1 Set @mm += @mm -- 相当于: @mm = @mm + @mm print(@mm) -- 输出:6 print(@mm % @nn) -- 6 % 4 {/alert}比较运算符{alert type="info"} 运算符 含义 =(等于) 等于 >(大于) 大于 <(小于) 小于 >=(大于或等于) 大于等于 <=(小于或等于) 小于或等于 <>(不等于) 不等于 !=(不等于) 不等于(非 ISO 标准) !<(不小于) 不小于(非 ISO 标准) !>(不大于) 不大于(非 ISO 标准) {/alert}字符串运算符字符串串联{alert type="info"}DECLARE @x VARCHAR(4000) = REPLICATE('x', 4000) DECLARE @z VARCHAR(8000) = REPLICATE('z',8000) DECLARE @y VARCHAR(max); SET @y = ''; SET @y += @x + @z; SELECT LEN(@y) AS Y; -- 8000{/alert}通配符-百分比字符 %{alert type="success"}SELECT FirstName, LastName FROM Person.Person WHERE FirstName LIKE 'Dan%'; {/alert}通配符-中括号 []{alert type="info"}-- 返回以 m 字母开头的名称。 [n-z] 指定第二个字母必须是 n 到 z 范围内的某个字母 SELECT name FROM sys.databases WHERE name LIKE 'm[n-z]%'; -- 查找其地址中有四位邮政编码的所有 Adventure Works 雇员的 ID 和姓名 SELECT e.BusinessEntityID, p.FirstName, p.LastName, a.PostalCode FROM HumanResources.Employee AS e INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.BusinessEntityAddress AS ea ON e.BusinessEntityID = ea.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = ea.AddressID WHERE a.PostalCode LIKE '[0-9][0-9][0-9][0-9]'; {/alert}通配符-无需匹配的字符串 ^{callout color="#676ed0"}匹配不在方括号 [^] 之间指定的范围或集合内的任何单个字符{/callout}{alert type="info"}-- 使用 [^] 运算符查找 Contact 表中名字以 Al 开头且第三个字母不是a的前5名用户 SELECT TOP 5 FirstName, LastName FROM Person.Person WHERE FirstName LIKE 'Al[^a]%'; -- 使用 [^] 运算符来查找不以字母或数字开头的字符串 SELECT [object_id], OBJECT_NAME(object_id) AS [object_name], name, column_id FROM sys.columns WHERE name LIKE '[^0-9A-z]%';{/alert}通配符- 下划线(匹配一个字符) _{alert type="info"}-- 返回以字母 m 开头且第三个字母为 d 的所有数据库名称 SELECT name FROM sys.databases WHERE name LIKE 'm_d%'; -- 返回 db_owner、db_ddladmin 等固定数据库角色的名称(此时的下划线被视为通配符) SELECT name FROM sys.database_principals WHERE name LIKE 'db_%'; -- 过滤出以 db_ 开头的数据库角色名(转义操作) SELECT name FROM sys.database_principals WHERE name LIKE 'db[_]%';{/alert}
2022年11月10日
149 阅读
0 评论
0 点赞
2022-10-05
10. SQLServer : 表达式
{alert type="info"}-- 语法 --Simple CASE expression: CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END --Searched CASE expression: CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END -- 示例一 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, Name FROM Production.Product ORDER BY ProductNumber; GO --示例二 SELECT ProductNumber, Name, "Price Range" = CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1000' END FROM Production.Product ORDER BY ProductNumber ; {/alert}
2022年10月05日
174 阅读
0 评论
0 点赞
2022-10-05
9. SQLServer : 语言元素-控制流
BEGIN...END{callout color="#60ef4d"}包括一系列的 Transact-SQL 语句,从而可以执行一组 Transact-SQL 语句。 BEGIN 和 END 是控制流语言的关键字。{/callout}{alert type="success"}-- 语法 BEGIN { sql_statement | statement_block } END --示例 USE AdventureWorks2012 GO BEGIN TRANSACTION GO IF @@TRANCOUNT = 0 BEGIN SELECT FirstName, MiddleName FROM Person.Person WHERE LastName = 'Adams'; ROLLBACK TRANSACTION; PRINT N'Rolling back the transaction two times would cause an error.'; END; ROLLBACK TRANSACTION; PRINT N'Rolled back the transaction.'; GO /* Rolled back the transaction. */ {/alert}BREAK{callout color="#4defed"}BREAK 将退出当前 WHILE 循环。 如果当前循环嵌套在另一个循环中,BREAK 将只退出当前循环,并且将控制给予外部循环中的下一个语句。{/callout}{alert type="info"}WHILE (1=1) BEGIN IF EXISTS (SELECT * FROM ##MyTempTable WHERE EventCode = 'Done') BEGIN BREAK; -- 'Done' row has finally been inserted and detected, so end this loop. END PRINT N'The other process is not yet done.'; -- Re-confirm the non-done status to the console. WAITFOR DELAY '00:01:30'; -- Sleep for 90 seconds. END{/alert}ELSE (IF...ELSE){alert type="success"}-- 语法 IF Boolean_expression { sql_statement | statement_block } [ ELSE { sql_statement | statement_block } ] -- 示例一 IF 1 = 2 PRINT 'Boolean_expression is true.' ELSE PRINT 'Boolean_expression is false.' ; GO -- 示例二 USE AdventureWorks2012; GO IF (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5 PRINT 'There are more than 5 Touring-3000 bicycles.' ELSE PRINT 'There are 5 or less Touring-3000 bicycles.' ; GO -- 示例三 USE AdventureWorks2012; GO DECLARE @AvgWeight DECIMAL(8,2), @BikeCount INT IF (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5 BEGIN SET @BikeCount = (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%'); SET @AvgWeight = (SELECT AVG(Weight) FROM Production.Product WHERE Name LIKE 'Touring-3000%'); PRINT 'There are ' + CAST(@BikeCount AS VARCHAR(3)) + ' Touring-3000 bikes.' PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.'; END ELSE BEGIN SET @AvgWeight = (SELECT AVG(Weight) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ); PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.' ; END ; GO -- 示例四 DECLARE @Number INT; SET @Number = 50; IF @Number > 100 PRINT 'The number is large.'; ELSE BEGIN IF @Number < 10 PRINT 'The number is small.'; ELSE PRINT 'The number is medium.'; END ; GO {/alert}GOTO{callout color="#4d75ef"}将执行流更改到标签处。 跳过 GOTO 后面的 Transact-SQL 语句,并从标签位置继续处理。 GOTO 语句和标签可在过程、批处理或语句块中的任何位置使用。 GOTO 语句可嵌套使用。{/callout}{alert type="success"}-- 语法 Define the label: label: Alter the execution: GOTO label -- 示例 DECLARE @Counter int; SET @Counter = 1; WHILE @Counter < 10 BEGIN SELECT @Counter SET @Counter = @Counter + 1 IF @Counter = 4 GOTO Branch_One --Jumps to the first branch. IF @Counter = 5 GOTO Branch_Two --This will never execute. END Branch_One: SELECT 'Jumping To Branch One.' GOTO Branch_Three; --This will prevent Branch_Two from executing. Branch_Two: SELECT 'Jumping To Branch Two.' Branch_Three: SELECT 'Jumping To Branch Three.'; {/alert}RETURN{callout color="#4def93"}从查询或过程中无条件退出。 RETURN 的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出。 RETURN 之后的语句是不执行的。{/callout}{alert type="success"}-- 示例一 CREATE PROCEDURE findjobs @nm sysname = NULL AS IF @nm IS NULL BEGIN PRINT 'You must give a user name' RETURN END ELSE BEGIN SELECT o.name, o.id, o.uid FROM sysobjects o INNER JOIN master..syslogins l ON o.uid = l.sid WHERE l.name = @nm END; -- 示例二 USE AdventureWorks2012; GO CREATE PROCEDURE checkstate @param VARCHAR(11) AS IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE ContactID = @param) = 'WA' RETURN 1 ELSE RETURN 2; GO {/alert}THROW{callout color="#4da1ef"}引发异常,并将执行转移到 TRY...CATCH 构造的 CATCH 块。{/callout}{alert type="success"}-- 语法 THROW [ { error_number | @local_variable }, { message | @local_variable }, { state | @local_variable } ] [ ; ] -- error_number : 表示异常的常量或变量 error_number 为 int,并且必须大于或等于50000且小于或等于2147483647 -- message : 描述异常的字符串或变量。 message 为 nvarchar(2048) -- State : 在 0 到 255 之间的常量或变量,指示与消息关联的状态。 state 为 tinyint -- 示例一 THROW 51000, 'The record does not exist.', 1; -- 示例二 USE tempdb; GO CREATE TABLE dbo.TestRethrow ( ID INT PRIMARY KEY ); BEGIN TRY INSERT dbo.TestRethrow(ID) VALUES(1); -- Force error 2627, Violation of PRIMARY KEY constraint to be raised. INSERT dbo.TestRethrow(ID) VALUES(1); END TRY BEGIN CATCH PRINT 'In catch block.'; THROW; END CATCH; {/alert}TRY...CATCH{alert type="success"}-- 语法 BEGIN TRY { sql_statement | statement_block } END TRY BEGIN CATCH [ { sql_statement | statement_block } ] END CATCH -- 示例 BEGIN TRY -- Generate a divide-by-zero error. SELECT 1/0; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; END CATCH; {/alert}WHILE{callout color="#4dbfef"}设置重复执行 SQL 语句或语句块的条件。 只要指定的条件为真,就重复执行语句。 可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。{/callout}{alert type="success"}-- 示例 USE AdventureWorks2012; GO WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300 BEGIN UPDATE Production.Product SET ListPrice = ListPrice * 2 SELECT MAX(ListPrice) FROM Production.Product IF (SELECT MAX(ListPrice) FROM Production.Product) > $500 BREAK ELSE CONTINUE END PRINT 'Too much for the market to bear'; -- 示例二 WHILE ( SELECT AVG(ListPrice) FROM dbo.DimProduct) < $300 BEGIN UPDATE dbo.DimProduct SET ListPrice = ListPrice * 2; SELECT MAX ( ListPrice) FROM dbo.DimProduct IF ( SELECT MAX (ListPrice) FROM dbo.DimProduct) > $500 BREAK; END {/alert}
2022年10月05日
165 阅读
0 评论
0 点赞
2022-10-04
8. SQLServer : 变量
表达式NULLIF{callout color="#ef4dea"}如果两个表达式不相等,则 NULLIF 返回第一个表达式。如果表达式相等,则 NULLIF 返回第一个表达式类型的空值。{/callout}{alert type="success"}NULLIF ( expression , expression ) {/alert}变量{alert type="success"}-- 创建 int 类型的变量 DECLARE @MyCounter INT; -- 声明多个变量 DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince NCHAR(2); -- 引用变量 DECLARE @MyVariable INT; SET @MyVariable = 1; SELECT BusinessEntityID, NationalIDNumber, JobTitle FROM HumanResources.Employee WHERE BusinessEntityID = @MyVariable; -- 赋值操作 DECLARE @EmpIDVariable INT; SELECT @EmpIDVariable = MAX(EmployeeID) FROM HumanResources.Employee; -- 如果 SELECT 语句返回多行且变量引用非标量表达式,则该变量将设置为结果集中最后一行中表达式的返回值 DECLARE @EmpIDVariable INT; SELECT @EmpIDVariable = BusinessEntityID FROM HumanResources.Employee ORDER BY BusinessEntityID DESC; SELECT @EmpIDVariable;{/alert}Set{callout color="#4def9b"}将先前使用DECLARE语句创建的指定局部变量设置为指定值{/callout}{alert type="success"}-- 赋值操作 DECLARE @myvar CHAR(20); SET @myvar = 'This is a test'; SELECT @myvar; -- 从查询中赋值 DECLARE @rows INT; SET @rows = (SELECT COUNT(*) FROM Sales.Customer); SELECT @rows; {/alert}SELECT{alert type="success"}-- 初始化赋值之后 使用select赋值 DECLARE @var1 VARCHAR(30); SELECT @var1 = 'Generic Name'; SELECT @var1 = [Name] FROM SalesLT.Product WHERE ProductID = 1000000; --Value does not exist SELECT @var1 AS 'ProductName';{/alert}DECLARE{callout color="#4def93"}变量是在批处理或过程的主体中用 DECLARE 语句声明的,并用 SET 或 SELECT 语句赋值。 游标变量可使用此语句声明,并可用于其他与游标相关的语句。 除非在声明中提供值,否则声明之后所有变量将初始化为 NULL。变量的名称。 变量名必须以 at 符 (@) 开头。 局部变量名称必须符合标识符规则。{/callout}
2022年10月04日
188 阅读
0 评论
1 点赞
2022-06-28
6. SQLServer : 字符串函数
ASCII{callout color="#f5d9b2"} 返回字符表达式中最左侧的字符的 ASCII 代码值。由于ASCII码码位包含128位数字、字母、特殊符号,因此如果传入参数为汉字等码位超过128的字符时结果会与预期不一致。UNICODE函数前128位与ASCII一致,此时可以使用 UNICODE 函数。{/callout}{alert type="info"}-- character_expression : char 或 varchar 类型的表达式。 ASCII ( character_expression ) character_expression : char 或 varchar 类型的表达式。返回值 : int {/alert}CHAR{callout color="#c1f452"}返回具有指定整数代码的单字节字符,由当前数据库默认排序规则的字符集和编码定义。{/callout}{alert type="success"}CHAR ( integer_expression ) integer_expression : 0 到 255 之间的整数。 对于此输入范围外的整数表达式或不表示完整字符的整数表达式,CHAR 返回 NULL 值。 字符超出了返回类型的长度时,CHAR 也会返回 NULL 值。注解 : 使用 CHAR 可将控制字符插入字符字符串中。 此表显示了一些常用的控制字符。控制字符值选项卡char(9)换行char(10)回车char(13)空格char(32){/alert}CHARINDEX{callout color="#f5a432"}函数会在第二个字符表达式中搜索一个字符表达式,这将返回第一个表达式(如果发现存在)的开始位置。索引初始值为1,不存在查询时返回0。{/callout}{alert type="warning"}CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) expressionToFind : 一个字符表达式,其中包含要查找的序列。 expressionToFind 限制为 8000 个字符 。expressionToSearch : 要搜索的字符表达式。start_location : 表示搜索开始位置的 integer 或 bigint 表达式 。 如果 start_location 未指定、具有负数值或 0,搜索将从 expressionToSearch 的开头开始 。返回类型 : 如果 expressionToSearch 具有一个 nvarchar(max)、varbinary(max) 或 varchar(max) 数据类型,则为 bigint;否则为 int 。{/alert}CONCAT{callout color="#84af0e"}此函数以端到端的方式返回从串联或联接的两个或更多字符串值生成的字符串。{/callout}{alert type="info"}CONCAT ( string_value1, string_value2 [, string_valueN ] ) string_value : 要与其他值串联的字符串值。 CONCAT 函数需要至少两个 string_value 自变量,并且不得超过 254 个 string_value 自变量。返回类型 : 长度和类型取决于输入的字符串值。{/alert}CONCAT_WS{callout color="#ff9705"}版本最低要求2017此函数以端到端的方式返回从串联或联接的两个或更多字符串值生成的字符串。 它会用第一个函数参数中指定的分隔符分隔连接的字符串值。{/callout}{alert type="success"}CONCAT_WS ( separator, argument1, argument2 [, argumentN]... )分隔符:任何字符类型的表达式(char、ncharnvarchar 或 varchar)。argument1、argument2、argumentN:任何类型的表达式。 CONCAT_WS 函数需要至少两个自变量,并且不得超过 254 个自变量。{/alert}DIFFERENCE{callout color="#8c98f2"}该函数返回一个整数值,用于度量两个不同字符表达式的 SOUNDEX() 值之间的差异。 DIFFERENCE 比较两个不同的 SOUNDEX 值,并返回一个整数值。 该值用于度量 SOUNDEX 值匹配的程度,范围为 0 到 4。 值为 0 表示 SOUNDEX 值之间的相似性较弱或不相似;4 表示与 SOUNDEX 值非常相似,甚至完全相同。DIFFERENCE 和 SOUNDEX 具有排序规则敏感度。{/callout}{alert type="info"}DIFFERENCE ( character_expression , character_expression ) character_expression : 字符数据的字母数字表达式。 character_expression 可以是常量、变量或列。返回类型 : int {/alert}FORMAT{callout color="#d642ff"}2008版本不能使用,最低2012版本返回以指定的格式和可选的区域性格式化的值。 使用 FORMAT 函数将日期/时间和数字值格式化为识别区域设置的字符串。 对于一般的数据类型转换,请使用 CAST 或 CONVERT。{/callout}{alert type="success"}FORMAT( value, format [, culture ] ) value : 支持格式化的数据类型的表达式。format : format 参数必须包含一个有效的 .NET Framework 格式字符串,要么作为标准格式字符串(例如,“C”或“D”),要么作为日期值和数值的自定义字符模式(例如,“MMMM DD, yyyy (dddd)”) 。 不支持组合格式。返回类型 : nvarchar 或 Null{/alert}示例一 :{alert type="info"}--简单 FORMAT 示例 DECLARE @d DATE = '11/22/2020'; SELECT FORMAT( @d, 'd', 'en-US' ) 'US English' ,FORMAT( @d, 'd', 'en-gb' ) 'Great Britain English' ,FORMAT( @d, 'd', 'de-de' ) 'German' ,FORMAT( @d, 'd', 'zh-cn' ) 'Simplified Chinese (PRC)'; SELECT FORMAT( @d, 'D', 'en-US' ) 'US English' ,FORMAT( @d, 'D', 'en-gb' ) 'Great Britain English' ,FORMAT( @d, 'D', 'de-de' ) 'German' ,FORMAT( @d, 'D', 'zh-cn' ) 'Chinese (Simplified PRC)'; --结果如下 US English Great Britain English German Simplified Chinese (PRC) ---------- --------------------- ---------- ------------------------ 11/22/2020 22/11/2020 22.11.2020 2020/11/22 US English Great Britain English German Chinese (Simplified PRC) --------------------------- ---------------------- -------------------------- --------------------------------------- Sunday, November 22, 2020 22 November 2020 Sonntag, 22. November 2020 2020年11月22日 {/alert}示例二 : 使用自定义格式字符串执行 FORMAT{callout color="#f0ad4e"}有关这些格式和其他自定义格式的详细信息,请参阅自定义数字格式字符串。{/callout}{alert type="info"}DECLARE @d DATE = GETDATE(); SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'Date' , FORMAT(123456789,'###-##-####') AS 'Custom Number'; ----结果如下 Date Custom Number ---------- ------------- 22/11/2020 123-45-6789 {/alert}示例三 : 用于数值类型的 FORMAT{callout color="#f0ad4e"}有关这些格式和其他数字格式的详细信息,请参阅标准数字格式字符串。{/callout}{alert type="info"}SELECT TOP(5) CurrencyRateID, EndOfDayRate ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Number Format' ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format' ,FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format' FROM Sales.CurrencyRate ORDER BY CurrencyRateID; {/alert}示例四 : 时间数据类型{alert type="success"}SELECT FORMAT(cast('07:35' as time), N'hh\.mm'); --> returns 07.35 SELECT FORMAT(cast('07:35' as time), N'hh\:mm'); --> returns 07:35 SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); -- returns 03:46 PM SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); -- returns 03:46 P select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm tt') -- returns 01:00 AM select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm t') -- returns 01:00 A select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'HH:mm') -- returns 14:00 {/alert}LEN{alert type="info"}-- 返回指定字符串表达式的字符数,其中不包含尾随空格 select LEN("1234"); -- 4{/alert}LEFT{callout color="#4def58"}返回字符串中从左边开始指定个数的字符。{/callout}{alert type="info"}SELECT LEFT('abcdefg',2); {/alert}LOWER、UPPER{callout color="#78ef4d"}将大写字符数据转换为小写字符数据后返回字符表达式。{/callout}{alert type="info"}SELECT LOWER('ABC'); -- abc SELECT UPPER('abc'); -- ABC{/alert}LTRIM、RTRIM{callout color="#f0ad4e"}删除字符串开头(结尾)的空格字符char(32)或其他指定字符。{/callout}{alert type="info"}LTRIM ( character_expression , [ characters ] ) RTRIM ( character_expression , [ characters ] )character_expression : 字符或二进制数据的表达式characters : SQL Server 2022 (16.x) 预览版及更高版本{/alert}REPLACE{callout color="#68ef4d"}用另一个字符串值替换所有出现的指定字符串值{/callout}{alert type="success"}-- 语法 REPLACE( string_expression , string_pattern , string_replacement ) -- 示例 SELECT REPLACE('123123','3','7'); -- 127127{/alert}REPLICATE{callout color="#f0ad4e"}重复指定次数的字符串值{/callout}{alert type="success"}-- 语法 REPLICATE ( string_expression , integer_expression ) -- 示例 SELECT REPLICATE(){/alert}REVERSE{callout color="#f0ad4e"}返回字符串值的反向顺序{/callout}{alert type="info"}select REVERSE('123'); -- 321{/alert}RIGHT{callout color="#4defc7"}返回具有指定字符数的字符串的右边部分{/callout}{alert type="success"}SELECT RIGHT('1234',2); -- 34{/alert}STR{callout color="#4dcfef"}返回从数字数据转换而来的字符数据。字符数据右对齐,具有指定的长度和小数精度{/callout}{alert type="success"}select str('12',3); -- len(str('12',3)) = 3{/alert}SUTFF{callout color="#f0ad4e"}STUFF函数将一个字符串插入到另一个字符串中。它在开始位置删除第一个字符串中指定长度的字符,然后在开始位置将第二个字符串插入第一个字符串中。{/callout}{alert type="info"}-- 语法 STUFF ( character_expression , start , length , replaceWith_expression ) -- 示例 SELECT STUFF('abcdef', 6, 0, 'ijklmn'); -- abcdeijklmnf SELECT STUFF('abcdef', 1, 0, 'ijklmn'); -- abcdeijklmnf SELECT STUFF('abcdef', 2, 3, 'ijklmn'); -- aijklmnefcharacter_expression : 第一个字符串start : 第一个字符串位置(SQL中第一个索引为1)length : 删除的字符个数第二个字符串,将插入在start之前{/alert}SUBSTRING{alert type="info"}select SUBSTRING('1234',2,2); -- 23{/alert}UNICODE{callout color="#f0ad4e"}为输入表达式的第一个字符返回Unicode标准定义的整数值{/callout}{alert type="info"}select UNICODE('A'); -- 65{/alert}
2022年06月28日
209 阅读
0 评论
1 点赞
2022-06-25
5. SQLServer : 数据类型转换
CAST语法 : CAST ( expression AS data_type [ ( length ) ] ) {card-default label="示例" width="100%"}USE AdventureWorks2012; GO SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice FROM Production.Product WHERE CAST(ListPrice AS int) LIKE '33%'; GO {/card-default}CONVERT语法 : CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) {card-default label="示例" width="100%"}USE AdventureWorks2012; GO SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice FROM Production.Product WHERE CONVERT(int, ListPrice) LIKE '33%'; {/card-default} 不带世纪数位 (yy) (1) 带世纪数位 (yyyy) Standard 输入/输出 (3) - 0 或 100 (1,2) datetime 和 smalldatetime 的默认值 mon dd yyyy hh:miAM(或 PM) 1 101 美国 1 = mm/dd/yy 101 = mm/dd/yyyy 2 102 ANSI 2 = yy.mm.dd 102 = yyyy.mm.dd 3 103 英国/法国 3 = dd/mm/yy 103 = dd/mm/yyyy 4 104 德语 4 = dd.mm.yy 104 = dd.mm.yyyy 5 105 意大利语 5 = dd-mm-yy 105 = dd-mm-yyyy 6 106(1) - 6 = dd mon yy 106 = dd mon yyyy 7 107(1) - 7 = Mon dd, yy 107 = Mon dd, yyyy 8 或 24 108 - hh:mi:ss - 9 或 109 (1,2) 默认格式 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 10 110 USA 10 = mm-dd-yy 110 = mm-dd-yyyy 11 111 日本 11 = yy/mm/dd 111 = yyyy/mm/dd 12 112 ISO 12 = yymmdd 112 = yyyymmdd - 13 或 113 (1,2) 欧洲默认格式 + 毫秒 dd mon yyyy hh:mi:ss:mmm(24 小时制) 14 114 - hh:mi:ss:mmm(24 小时制) - 20 或 120 (2) ODBC 规范 yyyy-mm-dd hh:mi:ss(24 小时制) - 21、25 或 121 (2) time、date、datetime2 和 datetimeoffset 的 ODBC 规范(带毫秒)默认值 yyyy-mm-dd hh:mi:ss.mmm(24 小时制) 22 - 美国 mm/dd/yy hh:mi:ss AM(或 PM) - 23 ISO8601 yyyy-mm-dd - 126 (4) ISO8601 yyyy-mm-ddThh:mi:ss.mmm(无空格) 注意: 毫秒 (mmm) 值为 0 时,不会显示毫秒小数部分的值。 例如,值“2012-11-07T18:26:20.000”显示为“2012-11-07T18:26:20”。 - 127(6, 7) 带时区 Z 的 ISO8601。 yyyy-MM-ddThh:mm:ss.fffZ(不带空格) 注意: 毫秒 (mmm) 值为 0 时,不会显示毫秒小数值。 例如,值“2012-11-07T18:26:20.000”显示为“2012-11-07T18:26:20”。 - 130 (1,2) 回历 (5) dd mon yyyy hh:mi:ss:mmmAM 在此样式中,mon 表示完整月份名称的多标记回历 unicode 表示形式。 该值在 SSMS 的默认 US 安装中不会正确呈现。 - 131 (2) 回历 (5) dd/mm/yyyy hh:mi:ss:mmmAM
2022年06月25日
166 阅读
0 评论
0 点赞
2022-06-25
4. SQLServer : 日期时间部分
返回系统日期和时间值的函数精度较高的系统日期和时间函数SYSDATETIME{alert type="info"}语法 : SYSDATETIME()返回值 : 返回包含计算机的日期和时间的 datetime2(7) 值,SQL Server 的实例在该计算机上运行。 返回值不包括时区偏移量。返回值类型 : datetime2(7){/alert}SYSDATETIMEOFFSET{alert type="info"}语法 : SYSDATETIMEOFFSET ()返回值 : 返回包含计算机的日期和时间的 datetimeoffset(7) 值,SQL Server 的实例在该计算机上运行。 返回值包括时区偏移量。返回值类型 : datetimeoffset(7){/alert}SYSUTCDATETIME{alert type="info"}语法 : SYSDATETIME()返回值 : 返回包含计算机的日期和时间的 datetime2(7) 值,SQL Server 的实例正在该计算机上运行。 该函数返回日期和时间作为 UTC 时间(协调世界时)。返回值类型 : datetime2(7){/alert}精度较高低系统日期和时间函数CURRENT_TIMESTAMP{alert type="success"}语法 : CURRENT_TIMESTAMP返回值 : 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 返回值不包括时区偏移量。返回值数据类型 : datetime{/alert}GETDATE{alert type="success"}语法 : GETDATE()返回值 : 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 返回值不包括时区偏移量。返回值数据类型 : datetime{/alert}GETUTCDATE{alert type="success"}语法 : GETUTCDATE()返回值 : 返回包含计算机的日期和时间的 datetime 值,SQL Server 的实例在该计算机上运行。 该函数返回日期和时间作为 UTC 时间(协调世界时)。返回值数据类型 : datetime{/alert}返回日期和时间部分的函数DATENAME : 返回表示指定 date 的指定 datepart 的字符串{alert type="warning"}语法 : DATENAME ( datepart , date ) 返回值类型: nvarchar{/alert} datepart 缩写形式 year yy, yyyy quarter qq, q month mm, m dayofyear dy, y day dd, d week wk, ww weekday dw, w hour hh minute mi, n second ss, s millisecond ms microsecond mcs nanosecond ns TZoffset tz ISO_WEEK ISOWK, ISOWW DATEPART : 返回表示指定 date 的指定 datepart 的整数{alert type="error"}语法 : DATEPART ( datepart , date )返回值类型 : int {/alert}DAY : 返回表示指定 date 的“日”部分的整数{alert type="info"}语法 : DAY ( date )返回值类型 : int{/alert}MONTH : 返回表示指定 date 的“月”部分的整数{alert type="info"}语法 : MONTH ( date )返回值类型 : int{/alert}YEAR : 返回表示指定 date 的“年”部分的整数{alert type="info"}语法 : YEAR ( date )返回值类型 : int{/alert}从相应部分返回日期和时间值的函数DATEFROMPARTS : 此函数返回映射到指定年、月、日值的 date 值{callout color="#a0f49a"}此函数可在 SQL Server 2012 (11.x) 及更高版本的服务器上执行远程处理。 它不能无法在版本低于 SQL Server 2012 (11.x) 的服务器上执行远程处理。{/callout}{alert type="info"}语法 : DATEFROMPARTS ( year, month, day )返回值类型 : date {/alert}DATETIME2FROMPARTS : 对指定日期和时间参数返回 datetime2 值{callout color="#f0ad4e"}此函数可以在 SQL Server 2012 (11.x) 服务器以及更高版本上远程执行。 但在 SQL Server 2012 (11.x) 之下的服务器版本中无法远程执行。{/callout}{alert type="info"}语法 : DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision ) 返回值类型 : datetime2 {/alert}DATETIMEFROMPARTS : 对指定日期和时间参数返回 datetime 值{callout color="#94e87d"}此函数可以在 SQL Server 2012 (11.x) 服务器以及更高版本上远程执行。 但在 SQL Server 2012 (11.x) 之下的服务器版本中无法远程执行。{/callout}{alert type="info"}语法 : DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds ) 返回值类型 : datetime{/alert}TIMEFROMPARTS : 对指定的时间返回 time 值{alert type="info"}语法 : TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) 返回值类型 : time {/alert}
2022年06月25日
149 阅读
0 评论
1 点赞
2022-06-13
3. FOR XML (SQL Server) : SELECT 查询将结果作为行集返回
环境要求{alert type="info"} MicroSoft SqlServer 文档 所有版本 SQL Server版本均支持此语法 {/alert}基本初识{alert type="success"}在 FOR XML 子句中,有 RAW、AUTO、EXPLICIT、PATH 四种模式。RAW 模式: RAW 模式在 SELECT 语句返回的行集中为每个行生成一 <个行> 元素。 可以通过编写嵌套 FOR XML 查询来生成 XML 层次结构。AUTO 模式: AUTO 模式将基于指定 SELECT 语句的方式来使用试探性方法在 XML 结果中生成嵌套。 您对生成的 XML 的形状具有最低限度的控制能力。 除了 AUTO 模式的试探性方法生成的 XML 形状之外,还可以编写 FOR XML 查询来生成 XML 层次结构。EXPLICIT模式: EXPLICIT 模式允许对 XML 的形状进行更多控制。 您可以随意混合属性和元素来确定 XML 的形状。PATH模式: PATH 模式与嵌套 FOR XML 查询功能一起以较简单的方式提供了 EXPLICIT 模式的灵活性。{/alert}测试数据库:{card-default label="创建数据库表" width="100%"}CREATE TABLE [dbo].[userTable]( [id] [nvarchar](50) NULL, [encode] [nvarchar](50) NULL, [name] [nvarchar](50) NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[userTable] ADD CONSTRAINT [DF_user_id] DEFAULT (newid()) FOR [id] GO {/card-default} {card-default label="插入测试数据" width="100%"}INSERT [dbo].[userTable] ([id], [encode], [name]) VALUES (N'1A074FE5-BAB3-4B71-932D-393387E94B5F', N'001', N'张三') GO INSERT [dbo].[userTable] ([id], [encode], [name]) VALUES (N'F75F5FA1-D8A1-4076-B840-99941DB9038F', N'002', N'李四') GO INSERT [dbo].[userTable] ([id], [encode], [name]) VALUES (N'FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4', N'003', N'王五') GO INSERT [dbo].[userTable] ([id],[encode], [name]) VALUES (N'79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A', N'004',null) {/card-default}{card-default label="测试表视图" width=""}idencodename1A074FE5-BAB3-4B71-932D-393387E94B5F001张三F75F5FA1-D8A1-4076-B840-99941DB9038F002李四FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4003王五79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A004NULL{/card-default}使用示例:{callout color="#bff990"}将查询结果作为行集返回,即只有一个查询行,此行只有一个查询列。多个指令可使用 逗号 分割开。{/callout}RAW模式示例一 : 基本使用{card-default label="SQL语句" width="100%"}select * from userTable for xml raw ;{/card-default}{card-default label="执行结果" width="100%"}<!--普通使用--> <row id="1A074FE5-BAB3-4B71-932D-393387E94B5F" encode="001" name="张三" /> <row id="F75F5FA1-D8A1-4076-B840-99941DB9038F" encode="002" name="李四" /> <row id="FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4" encode="003" name="王五" /> <row id="79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A" encode="004" />{/card-default}示例二 : ELEMENTS 指令{card-default label="SQL语句" width="100%"}select * from userTable for xml raw,ELEMENTS ;{/card-default} {card-default label="执行结果" width="100%"}<!--ELEMENTS指令:检索以元素为中心的 XML--> <row> <id>1A074FE5-BAB3-4B71-932D-393387E94B5F</id> <encode>001</encode> <name>张三</name> </row> <row> <id>F75F5FA1-D8A1-4076-B840-99941DB9038F</id> <encode>002</encode> <name>李四</name> </row> <row> <id>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4</id> <encode>003</encode> <name>王五</name> </row> <row> <id>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A</id> <encode>004</encode> </row>{/card-default}示例三 : XSINIL 添加指令 ELEMENTS{card-default label="SQL语句" width="100%"}select * from userTable for xml raw,ELEMENTS XSINIL ;{/card-default}{card-default label="执行结果" width="100%"}<!--XSINIL 添加指令 ELEMENTS:对为 Null 值的数据生成XML--> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>1A074FE5-BAB3-4B71-932D-393387E94B5F</id> <encode>001</encode> <name>张三</name> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>F75F5FA1-D8A1-4076-B840-99941DB9038F</id> <encode>002</encode> <name>李四</name> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4</id> <encode>003</encode> <name>王五</name> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A</id> <encode>004</encode> <name xsi:nil="true" /> </row>{/card-default}示例四 : XMLDATA 指令{card-default label="SQL语句" width="100%"}select * from userTable for xml raw,XMLDATA ;{/card-default}{card-default label="执行结果" width="100%"}<!-- 返回描述文档结构的 XML-DATA 架构 --> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="row" content="empty" model="closed"> <AttributeType name="id" dt:type="string" /> <AttributeType name="encode" dt:type="string" /> <AttributeType name="name" dt:type="string" /> <attribute type="id" /> <attribute type="encode" /> <attribute type="name" /> </ElementType> </Schema> <row xmlns="x-schema:#Schema1" id="1A074FE5-BAB3-4B71-932D-393387E94B5F" encode="001" name="张三" /> <row xmlns="x-schema:#Schema1" id="F75F5FA1-D8A1-4076-B840-99941DB9038F" encode="002" name="李四" /> <row xmlns="x-schema:#Schema1" id="FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4" encode="003" name="王五" /> <row xmlns="x-schema:#Schema1" id="79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A" encode="004" />{/card-default}其他{alert type="info"}FOR XML RAW ('xx'): 重命名 <行> 元素。ROOT 指令: 为 FOR XML 生成的 XML 指定根元素。比如:ROOT('MyRoot');XMLSCHEMA 指令: 返回 XSD 架构 。比如:可以使用 XMLSCHEMA ('urn:example.com') 格式指定命名空间 。BINARY BASE64 指令: 返回在 varbinary(max)、binary 类型列中存储的 以 base64 编码格式返回二进制数据。{/alert}AUTO 模式示例一:{card-default label="SQL语句" width="100%"}select * from userTable x for xml AUTO;{/card-default}{card-default label="执行结果" width="100%"}<!-- 可以为表设置别名 同时结合上述指令 --> <userTable id="1A074FE5-BAB3-4B71-932D-393387E94B5F" encode="001" name="张三" /> <userTable id="F75F5FA1-D8A1-4076-B840-99941DB9038F" encode="002" name="李四" /> <userTable id="FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4" encode="003" name="王五" /> <userTable id="79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A" encode="004" />{/card-default}示例二:{callout color="#f0ad4e"} 先指定 OrderHeader 表中的列,再指定 Cust 表中的列, 因此,将创建第一个 元素,然后将 子元素添加到其中。{/callout}{card-default label="SQL语句" width="100%"}elect OrderHeader.CustomerID, OrderHeader.SalesOrderID, OrderHeader.Status, Cust.CustomerID, Cust.CustomerType from Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader where Cust.CustomerID = OrderHeader.CustomerID for xml auto; {/card-default}{card-default label="执行结果" width="100%"}<!-- 可结合 ELEMENTS 等其他指令--> <OrderHeader CustomerID="1" SalesOrderID="43860" Status="5"> <Cust CustomerID="1" CustomerType="S" /> </OrderHeader> ...{/card-default}PATH 模式示例一{card-default label="SQL语句" width="100%"}select * from userTable for xml PATH {/card-default}{card-default label="执行结果" width="100%"}<row> <id>1A074FE5-BAB3-4B71-932D-393387E94B5F</id> <encode>001</encode> <name>张三</name> </row> <row> <id>F75F5FA1-D8A1-4076-B840-99941DB9038F</id> <encode>002</encode> <name>李四</name> </row> <row> <id>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4</id> <encode>003</encode> <name>王五</name> </row> <row> <id>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A</id> <encode>004</encode> </row>{/card-default}示例二{card-default label="SQL语句" width="100%"}select * from userTable for xml PATH('') ;{/card-default}{card-default label="执行结果" width="100%"}<id>1A074FE5-BAB3-4B71-932D-393387E94B5F</id> <encode>001</encode> <name>张三</name> <id>F75F5FA1-D8A1-4076-B840-99941DB9038F</id> <encode>002</encode> <name>李四</name> <id>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4</id> <encode>003</encode> <name>王五</name> <id>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A</id> <encode>004</encode>{/card-default}示例三{callout color="#58d336"}如果列名称以符号 (@) 开头,并且不包含斜杠标记 (/),则会创建具有相应列值的元素的属性 row在对应的语句中,可根据不同模式对表名、列名进行别名的设置而得到相应得到XML结构{/callout}{card-default label="SQL语句" width="100%"}select id as '@part',encode as '@code',name from userTable for xml PATH{/card-default}{card-default label="执行结果" width="100%"}<row part="1A074FE5-BAB3-4B71-932D-393387E94B5F" code="001"> <name>张三</name> </row> <row part="F75F5FA1-D8A1-4076-B840-99941DB9038F" code="002"> <name>李四</name> </row> <row part="FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4" code="003"> <name>王五</name> </row> <row part="79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A" code="004" />{/card-default}示例四{callout color="#f4d19f"}如果列名不以符号 () @ 开头,但包含斜杠标记 (/) ,则列名表示 XML 层次结构。 {/callout}{card-default label="SQL语句" width="100%"}select ID as 'ID1/ID2',ENCODE,NAME from userTable for xml PATH{/card-default}{card-default label="执行结果" width="100%"}<row> <ID1> <ID2>1A074FE5-BAB3-4B71-932D-393387E94B5F</ID2> </ID1> <ENCODE>001</ENCODE> <NAME>张三</NAME> </row> <row> <ID1> <ID2>F75F5FA1-D8A1-4076-B840-99941DB9038F</ID2> </ID1> <ENCODE>002</ENCODE> <NAME>李四</NAME> </row> <row> <ID1> <ID2>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4</ID2> </ID1> <ENCODE>003</ENCODE> <NAME>王五</NAME> </row> <row> <ID1> <ID2>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A</ID2> </ID1> <ENCODE>004</ENCODE> </row>{/card-default}示例五{callout color="#f2eade"}如果指定的列名是通配符 (*) ,则插入该列的内容就好像没有指定列名一样。 如果此列不是xml 类型的列,则此列的内容将作为文本节点插入.{/callout}{card-default label="SQL语句" width="100%"}select ID as '*',ENCODE,NAME from userTable for xml PATH {/card-default}{card-default label="执行结果" width="100%"}<row>1A074FE5-BAB3-4B71-932D-393387E94B5F<ENCODE>001</ENCODE><NAME>张三</NAME></row> <row>F75F5FA1-D8A1-4076-B840-99941DB9038F<ENCODE>002</ENCODE><NAME>李四</NAME></row> <row>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4<ENCODE>003</ENCODE><NAME>王五</NAME></row> <row>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A<ENCODE>004</ENCODE></row>{/card-default}示例六{callout color="#c4c0ba"}如果列名是某个 XPath 节点测试,将如下表所示映射该列的内容。 如果列名是某个 XPath 节点测试,则该列的内容将映射到相应的节点。 如果该列的 SQL 类型是 xml,将返回一个错误。{/callout}列名行为text()对于名为 text() 的列,该列中的字符串值将被添加为文本节点。comment()对于名为 comment() 的列,该列中的字符串值将被添加为 XML 注释。node()对于节点名称 () 的列,结果与列名称是通配符 () * 时的结果相同。处理指令(名称)如果列名为处理指令,该列中的字符串值将被添加为此处理指令目标名称的 PI 值。{card-default label="SQL语句" width="100%"}select ID as 'text()',ENCODE as 'comment()',NAME as 'node()' from userTable for xml PATH {/card-default}{card-default label="执行结果" width="100%"}<row>1A074FE5-BAB3-4B71-932D-393387E94B5F<!--001-->张三</row> <row>F75F5FA1-D8A1-4076-B840-99941DB9038F<!--002-->李四</row> <row>FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4<!--003-->王五</row> <row>79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A<!--004--></row>{/card-default}示例七{card-default label="SQL语句" width="100%"}select ','+ID from userTable for xml PATH(''){/card-default}{card-default label="执行结果" width="100%"},1A074FE5-BAB3-4B71-932D-393387E94B5F,F75F5FA1-D8A1-4076-B840-99941DB9038F,FF611E9B-2D28-4C53-A4DE-FE67A16D4FD4,79BB7B1A-CAC9-4D2E-A0CE-56C91F8FF76A{/card-default}EXPLICIT 模式{callout color="#37ae9b"}具体可参阅微软官方文档{/callout}
2022年06月13日
216 阅读
0 评论
1 点赞
2022-04-20
2. 分组聚合函数:ROW_NUMBER() OVER (PARTITION BY Column ORDER BY COLUMN
{alert type="success"}分组聚合函数可以对数据分组并排序以按分组增加一个自动递增的列以得到理想的数据。SQLServer版本至少2005版语法:ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY COLUMN2)Column1: 分组列Column2:排序列演示:1.创建如下表Table_1结构并插入数据:idkysl1kysl22D0357A3-8CCF-442A-B0C1-35DFE2A881CBaa1AB022164-0C61-4321-8E36-3A5A3E35EA4Ecc3314C03C5-D79C-4EA0-82CD-25337935E0A0bb2BD9C0338-8933-4423-81DB-A0AEE05D03F0aa240718F52-F815-4C61-968E-2BAEE248CA81cc416088343-FB69-4917-9677-DAEA3ABB8A09bb57EE903A5-2CF9-4BB5-8B66-33E6AEFEF3FDaa30AF9501D-C4A9-4CC0-B753-CABDDB90B783cc5822DAA22-786C-4B67-827E-A5BB10B60845bb42.执行SQL:select *,ROW_NUMBER() OVER (PARTITION BY kysl ORDER BY KYSL2 )ws from [Table_1] 结果如下:idkysl1kysl2n2D0357A3-8CCF-442A-B0C1-35DFE2A881CBaa11BD9C0338-8933-4423-81DB-A0AEE05D03F0aa227EE903A5-2CF9-4BB5-8B66-33E6AEFEF3FDaa33314C03C5-D79C-4EA0-82CD-25337935E0A0bb21822DAA22-786C-4B67-827E-A5BB10B60845bb4216088343-FB69-4917-9677-DAEA3ABB8A09bb53AB022164-0C61-4321-8E36-3A5A3E35EA4Ecc3140718F52-F815-4C61-968E-2BAEE248CA81cc420AF9501D-C4A9-4CC0-B753-CABDDB90B783cc53{/alert}
2022年04月20日
239 阅读
0 评论
2 点赞