SQL Server 常用关键词语法汇总

SQL Server函数、表操作及常用关键词详解

一、函数

1.1 CAST

CAST ( expression AS data_type [ ( length ) ] )
  • expression: 这是你想要转换的数据或表达式。
  • data_type: 目标数据类型,比如 INT, VARCHAR, DATE
    等等。
  • (length): 对于某些数据类型(如 CHAR, VARCHAR, BINARY,
    VARBINARY),可以指定长度。对于其他数据类型,这个参数是可选的或不适用的。

示例
字符串转换为整数

SELECT CAST('123' AS INT) AS ConvertedValue;

整数转换为字符串

SELECT CAST(123 AS VARCHAR(10)) AS ConvertedValue;

日期转换

SELECT CAST('2023-01-01' AS DATE) AS ConvertedDate;

浮点数转换为整数
需要注意的是,当将浮点数转换为整数时,SQL Server 会进行截断而不是四舍五入。

SELECT CAST(123.456 AS INT) AS ConvertedValue; -- 结果为 123

转换为布尔值
在 SQL Server 中,并没有直接的布尔类型,但是你可以使用位(bit)类型来表示布尔值。

SELECT CAST(1 AS BIT) AS ConvertedBoolean; -- 结果为 1(真)
SELECT CAST(0 AS BIT) AS ConvertedBoolean; -- 结果为 0(假)

注意事项

  • 当执行数据类型转换时,如果源数据与目标数据类型不兼容,可能会导致错误。
  • 在处理日期和时间数据时,确保输入的格式正确,否则可能会导致意外的结果或错误。
  • 使用 CAST 时,要确保转换后的数据类型能够容纳原始数据的所有可能值,以避免数据丢失或不准确。

1.2 CONCAT()

SQL Server 中,CONCAT() 是一个字符串函数,用于将两个或多个字符串表达式连接在一起。它会自动处理 NULL 值,如果任意一个操作数是 NULL,CONCAT() 会将其当作空字符串('')处理,而不会返回 NULL
CONCAT() 函数的基本语法如下:

CONCAT ( string_expression1, string_expression2 [, string_expressionN ]... )

示例
1.连接字符串常量:

SELECT CONCAT('Hello', ' ', 'World') AS Result;
-- 结果: Hello World

2.连接字符串与 NULL:

SELECT CONCAT('Hello', NULL, 'World') AS Result;
-- 结果: HelloWorld

3.使用表中的列:

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
-- 如果 first_name 或 last_name 有 NULL 值,它们会被当作空字符串处理。

4.连接多于两个表达式:

SELECT CONCAT(address_line1, ', ', city, ', ', state, ' ', postal_code) AS full_address
FROM addresses;

5.混合使用不同的数据类型:

SELECT CONCAT('Order ID: ', order_id, '; Date: ', order_date) AS order_info
FROM orders;
-- order_id 可能是整数,order_date 是日期时间类型,但 CONCAT 会自动转换这些类型到字符串。

请注意,CONCAT() 函数是在 SQL Server 2012 版本中引入的,因此如果你使用的 SQL Server 版本早于此版本,那么你可能需要使用 + 运算符来连接字符串,并且需要手动处理 NULL 值,例如通过使用 ISNULL() 或 COALESCE() 函数。

1.3 NULLIF()

NULLIF() 是 SQL Server 中的一个条件函数,它用于比较两个表达式。如果这两个表达式相等,那么 NULLIF() 返回 NULL;如果不相等,则返回第一个表达式。这个函数通常用来避免除以零的错误或者在需要将特定值转换为 NULL 时使用。

NULLIF() 的语法如下:

NULLIF ( expression1, expression2 )
  • expression1:这是要检查的第一个表达式。
  • expression2:这是与 expression1 比较的第二个表达式。

示例
1.避免除以零:
如果你有一个计算需要除以一个可能为零的值,你可以用 NULLIF() 来确保分母不为零。如果分母是零,NULLIF() 将返回 NULL,这会导致整个表达式的值也是 NULL(而不是引发除以零的错误)。

SELECT numerator / NULLIF(denominator, 0) AS result
FROM some_table;

在这个例子中,如果 denominator 是 0,那么 NULLIF(denominator, 0) 将返回 NULL,因此 numerator / NULL 也会返回 NULL 而不是抛出错误。

2.将特定值转换为 NULL:
假设你有一个表,其中某些字段可能包含空字符串 '',而你希望在查询结果中将这些空字符串显示为 NULL。

SELECT NULLIF(some_column, '') AS modified_column
FROM some_table;

如果 some_column 中有任何行的值是空字符串,NULLIF(some_column, '') 将把这些值转换为 NULL。

3.结合其他函数使用:
你可以将 NULLIF() 与其他函数如 COALESCE() 结合使用,以提供默认值。

SELECT COALESCE(NULLIF(some_column, ''), 'Default Value') AS final_value
FROM some_table;

这里,如果 some_column 是空字符串,它首先被 NULLIF() 转换为 NULL,然后 COALESCE() 函数会用 ‘Default Value’ 替代 NULL。
4.用于去重:
有时候,NULLIF() 可以用于删除重复的数据行。例如,如果你有两个列,你想保留其中一个非空的值,可以这样做:

SELECT id, COALESCE(NULLIF(column1, column2), column2) AS non_duplicate_column
FROM some_table;

这个例子中,如果 column1column2 的值相同,NULLIF(column1, column2) 会返回 NULL,接着 COALESCE() 会返回 column2 的值。如果它们不同,COALESCE() 会返回 column1 的值。

NULLIF() 是一个非常有用的函数,尤其是在处理数据清洗和预处理的任务中。它可以帮助简化代码并提高查询的健壮性。

1.4 ROW_NUMBER()和OVER ( … )

基本语法

ROW_NUMBER() OVER (
    [PARTITION BY column1, column2, ...]
    ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...
) AS alias
  • ROW_NUMBER():生成唯一的行号。
  • OVER:定义窗口函数的作用范围。
  • PARTITION BY:可选,用于将结果集划分为多个分区,每个分区内的行将独立编号。
  • ORDER BY:必需,用于定义每个分区内行的排序顺序。
  • AS alias:为生成的行号列指定一个别名。

示例
在这里插入图片描述
示例 1:按客户编号分组并按订单日期排序

SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount,
    ROW_NUMBER() OVER (
        PARTITION BY CustomerID
        ORDER BY OrderDate ASC
    ) AS RowNumber
FROM 
    Orders

在这里插入图片描述
示例 2:按总金额降序排序并分配行号

SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount,
    ROW_NUMBER() OVER (
        ORDER BY TotalAmount DESC
    ) AS RowNumber
FROM 
    Orders

在这里插入图片描述
示例 3:分页查询
假设我们想获取每个客户的最新订单,可以使用 ROW_NUMBER() 来实现分页查询:

WITH RankedOrders AS (
    SELECT 
        OrderID,
        CustomerID,
        OrderDate,
        TotalAmount,
        ROW_NUMBER() OVER (
            PARTITION BY CustomerID
            ORDER BY OrderDate DESC
        ) AS RowNumber
    FROM 
        Orders
)
SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount
FROM 
    RankedOrders
WHERE 
    RowNumber = 1

在这里插入图片描述
解释
示例 1:
按 CustomerID 分组,每个分组内的行按 OrderDate 升序排列。
每个分组内的行号从 1 开始递增。
示例 2:
按 TotalAmount 降序排列,整个结果集作为一个分组。
行号从 1 开始递增。
示例 3:
使用 ROW_NUMBER() 为每个客户的订单按 OrderDate 降序排列并分配行号。
使用 WITH 子句创建一个临时结果集 RankedOrders。
从 RankedOrders 中选择 RowNumber = 1 的行,即每个客户的最新订单。
总结
ROW_NUMBER() OVER 是一个非常强大的窗口函数,可以用于多种场景,如分组排序、分页查询等。通过合理使用 PARTITION BY 和 ORDER BY 子句,可以灵活地控制行号的分配方式。希望这些示例能帮助你更好地理解和使用 ROW_NUMBER() OVER。

1.5 CASE WHEN

CASE WHEN 是 SQL Server 中用于条件逻辑的表达式,它允许你执行复杂的条件判断,并根据不同的条件返回不同的值。CASE 表达式有两种形式:简单 CASE 和搜索 CASE。在大多数情况下,搜索 CASE 更加灵活和常用,因为它允许你指定任意数量的条件。

搜索 CASE 语法

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    [ELSE else_result]
END
  • WHEN condition THEN result:这里的 condition 是一个布尔表达式,如果该表达式为真,则返回
    result。
  • ELSE else_result:这是可选的,当所有 WHEN 条件都不满足时返回的值。如果没有指定 ELSE 部分且没有 WHEN
    条件匹配,则返回 NULL。
  • END:每个 CASE 表达式必须以 END 结束。

示例
1. 简单的条件判断
假设我们有一个名为 orders 的表,其中有一列 order_amount 表示订单金额。我们可以使用 CASE WHEN 来根据订单金额分类订单:

SELECT 
    order_id,
    order_amount,
    CASE
        WHEN order_amount > 1000 THEN 'High Value'
        WHEN order_amount BETWEEN 500 AND 1000 THEN 'Medium Value'
        WHEN order_amount < 500 THEN 'Low Value'
        ELSE 'Unknown'
    END AS order_category
FROM orders;

在这个例子中,order_category 列会根据 order_amount 的值被填充为 'High Value'、'Medium Value' 或 'Low Value'。如果 order_amount 的值不符合任何条件,则会被标记为 'Unknown'

2. 使用多个条件
你可以组合多个条件来创建更复杂的逻辑。例如,我们想要根据订单日期和金额来确定是否给予折扣:

SELECT 
    order_id,
    order_date,
    order_amount,
    CASE
        WHEN order_date >= '2024-01-01' AND order_amount > 1000 THEN 'Yes, 10% off'
        WHEN order_date >= '2024-01-01' AND order_amount BETWEEN 500 AND 1000 THEN 'Yes, 5% off'
        ELSE 'No Discount'
    END AS discount_status
FROM orders;

这里,discount_status 会根据订单日期和金额决定是否有折扣以及折扣的比例。

3. 在更新语句中使用 CASE WHEN
CASE WHEN 也可以用于 UPDATE 语句中,以便有条件地更新数据。例如,调整员工的工资:

UPDATE employees
SET salary = CASE
    WHEN department = 'Sales' AND salary < 50000 THEN salary * 1.1
    WHEN department = 'Engineering' AND salary < 60000 THEN salary * 1.05
    ELSE salary
END;

这段代码会根据部门和当前工资水平给员工加薪。

4. 简单 CASE 语法(基于表达式的比较)
简单 CASE 适用于当你只需要将一个表达式与多个可能的值进行比较的情况。它的语法如下:

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    [ELSE else_result]
END

例如,如果我们有一个 status_code 列,可以将其转换为更易读的文本描述:

SELECT 
    status_code,
    CASE status_code
        WHEN 1 THEN 'Active'
        WHEN 2 THEN 'Inactive'
        WHEN 3 THEN 'Pending'
        ELSE 'Unknown'
    END AS status_description
FROM statuses;

在这个例子中,status_description 将根据 status_code 的值显示相应的描述。

综合案例:

UPDATE Tablename 
SET Optionvalues=NULLIF(
CONCAT(
CASE WHEN value1 IS NOT NULL AND value1 <>'0' THEN '1' ELSE '' END,
CASE WHEN value2 IS NOT NULL AND value2 <>'0' THEN ',2' ELSE '' END,
CASE WHEN value3  IS NOT NULL AND value3  <>'0' THEN ',3' ELSE '' END,
CASE WHEN value4 IS NOT NULL AND value4 <>'0' THEN ',4' ELSE NULL END
)
,'')

注意事项

  • CASE 表达式是按照从上到下的顺序评估的,因此一旦某个 WHEN 条件满足,就不会再检查后续的 WHEN 条件。
  • CASE 表达式可以在 SELECT、UPDATE、DELETE 语句中使用,也可以作为子查询的一部分。
  • 如果你有多个 WHEN 条件可能会同时为真,确保它们的顺序符合你的逻辑需求,因为只有第一个满足的条件会被应用。

CASE WHEN 是 SQL 中非常强大的工具,可以帮助你在查询中实现复杂的业务逻辑。熟练掌握它可以大大提高查询的灵活性和效率。

1.6 LEN()

LEN() 是 SQL Server 中的一个字符串函数,用于返回一个字符串表达式的字符数。它不计算尾随空格,并且对于 NULL 输入会返回 NULL。LEN() 函数非常适用于需要知道字符串长度的场景,比如数据验证、格式化输出或进行字符串处理。
语法

LEN ( string_expression )
  • string_expression:这是要计算长度的字符串表达式。它可以是字符串常量、变量、列名或其他返回字符串值的表达式。如果表达式不是字符串类型(如VARCHAR 或 NVARCHAR),SQL Server 会尝试隐式转换为字符串类型。

示例

  1. 计算字符串常量的长度
SELECT LEN('Hello, World!') AS StringLength;
-- 结果: 13

在这个例子中,LEN() 函数计算了字符串 ‘Hello, World!’ 的长度,不包括尾随空格(如果有的话)。

2. 计算包含尾随空格的字符串长度

SELECT LEN('Hello, World!   ') AS StringLength;
-- 结果: 13

这里,尽管字符串后面有三个空格,LEN() 函数仍然返回 13,因为它不计算尾随空格。

3. 使用表中的列
假设你有一个名为 employees 的表,其中有一列 first_name。你可以使用 LEN() 来计算每个员工名字的长度:

SELECT first_name, LEN(first_name) AS NameLength
FROM employees;

这将返回每个员工的名字及其长度。

4. 处理 NULL 值
如果你的数据可能包含 NULL 值,LEN() 函数会返回 NULL。你可以结合 ISNULL() 或 COALESCE() 函数来提供默认值:

SELECT first_name, ISNULL(LEN(first_name), 0) AS NameLength
FROM employees;

在这个例子中,如果 first_name 是 NULL,ISNULL(LEN(first_name), 0) 将返回 0 而不是 NULL。

5. 计算非字符串类型的长度
LEN() 函数可以接受非字符串类型的输入,只要这些类型可以隐式转换为字符串。例如,计算整数的字符数:

SELECT LEN(12345) AS NumberLength;
-- 结果: 5

这里,整数 12345 被隐式转换为字符串 ‘12345’,然后 LEN() 返回其长度 5。

6. 结合其他字符串函数
你可以将 LEN() 与其他字符串函数结合使用,以实现更复杂的逻辑。例如,去掉字符串两边的空格后再计算长度:

SELECT LEN(RTRIM(LTRIM('   Hello, World!   '))) AS TrimmedStringLength;
-- 结果: 13

在这个例子中,LTRIM() 和 RTRIM() 函数分别去掉了字符串左边和右边的空格,然后再用 LEN() 计算长度。

注意事项

  • LEN() 不计算尾随空格。如果你需要计算所有字符(包括尾随空格),可以使用 DATALENGTH() 函数,但请注意
    DATALENGTH() 返回的是字节数,而不是字符数。
  • 对于 Unicode 字符串(如 NVARCHAR 类型),LEN() 返回的是字符数,而 DATALENGTH()
    返回的是字节数(每个 Unicode 字符通常是 2 个字节)。
  • 如果你需要确保字符串长度不超过某个限制,可以在插入或更新数据时使用 LEN() 进行检查。 LEN()
    是一个简单但非常有用的函数,在处理字符串数据时经常会用到。理解它的行为可以帮助你更有效地编写 SQL 查询。

1.7 PATINDEX()

PATINDEX() 是 SQL Server 中的一个字符串函数,用于返回指定模式在字符串中首次出现的位置。如果找不到该模式,则返回 0。PATINDEX() 支持使用通配符来定义更复杂的模式匹配规则,这使得它比简单的 CHARINDEX() 函数更为灵活。

语法

PATINDEX ( '%pattern%' , expression )
  • %pattern%:这是你想要查找的模式。模式可以包含通配符,并且必须用百分号 %包围,除非你在模式的开头或结尾明确指定了一个非通配符字符。% 表示任意数量(包括零个)的字符。
  • expression:这是你要搜索的字符串表达式。它可以是字符串常量、变量、列名或其他返回字符串值的表达式。

通配符

PATINDEX() 支持以下通配符:

  • %:匹配任意数量的字符(包括零个字符)。
  • _:匹配单个字符。
  • [charlist]:匹配 charlist 中的任何一个字符。
  • [^charlist]:匹配不在 charlist 中的任何一个字符。

示例
1. 查找简单模式
假设我们有一个名为 products 的表,其中有一列 product_name。我们可以使用 PATINDEX() 来查找产品名称中是否包含特定的单词,比如 ‘phone’:

SELECT product_name, PATINDEX('%phone%', product_name) AS Position
FROM products;

这个查询会返回每个产品名称中 ‘phone’ 首次出现的位置。如果没有找到 ‘phone’,则返回 0。

2. 使用通配符进行复杂模式匹配
如果你想查找以某个字母开头的产品名称,可以使用通配符:

SELECT product_name, PATINDEX('A%', product_name) AS Position
FROM products;

这里,PATINDEX(‘A%’, product_name) 会查找以字母 ‘A’ 开头的产品名称,并返回其位置。

3. 查找多个字符中的任意一个
你可以使用字符列表 [charlist] 来查找多个字符中的任意一个:

SELECT product_name, PATINDEX('%[aeiou]%', product_name) AS VowelPosition
FROM products;

这段代码会查找 product_name 中第一个元音(a, e, i, o, u)的位置。

4. 排除某些字符
如果你想要查找不包含某些字符的模式,可以使用 [^charlist]:

SELECT product_name, PATINDEX('%[^aeiou]%', product_name) AS NonVowelPosition
FROM products;

这段代码会查找 product_name 中第一个非元音字符的位置。

5. 结合其他字符串函数
你可以将 PATINDEX() 与其他字符串函数结合使用,以实现更复杂的逻辑。例如,提取从某个模式开始的子字符串:

SELECT product_name,
       SUBSTRING(product_name, PATINDEX('%phone%', product_name), LEN(product_name)) AS PhonePart
FROM products
WHERE PATINDEX('%phone%', product_name) > 0;

在这个例子中,SUBSTRING() 函数从 product_name 中提取从 ‘phone’ 开始的所有字符。

6. 处理 NULL 值
如果 expression 或 pattern 是 NULL,PATINDEX() 将返回 NULL。你可以结合 ISNULL() 或 COALESCE() 函数来处理这种情况:

SELECT product_name, ISNULL(PATINDEX('%phone%', product_name), 0) AS Position
FROM products;

这段代码确保即使 product_name 是 NULL,也会返回 0 而不是 NULL。

7.结合使用 PATINDEX 与其他函数:

SELECT SUBSTRING('abc123def', PATINDEX('%[0-9]%', 'abc123def'), 3);
--结果123

注意事项
PATINDEX() 对大小写不敏感,除非你的数据库设置了区分大小写的排序规则(collation)。如果你需要区分大小写的模式匹配,可以显式指定排序规则:

SELECT product_name, PATINDEX('%Phone%', product_name COLLATE Latin1_General_CS_AS) AS Position
FROM products;
  • PATINDEX() 只返回模式首次出现的位置。如果你需要查找所有出现的位置,可能需要使用循环或其他方法。
  • PATINDEX() 不完全支持正则表达式。如果你需要更复杂的模式匹配,可以考虑使用 CLR 集成或外部工具。
  • PATINDEX() 是一个非常有用的函数,特别适用于需要根据复杂模式进行字符串搜索和处理的场景。熟练掌握它可以让你更高效地编写 SQL 查询。

1.8 SUBSTRING()

SUBSTRING() 是 SQL Server 中用于从字符串中提取子字符串的函数。它允许你指定起始位置和要提取的字符数,从而从源字符串中获取特定部分的子字符串。SUBSTRING() 在处理文本数据时非常有用,例如截取文件名、解析地址或提取特定格式的数据。

语法

SUBSTRING ( expression, start, length )
  • expression:这是你要从中提取子字符串的源字符串。它可以是字符串常量、变量、列名或其他返回字符串值的表达式。
  • start:这是子字符串的起始位置(从 1 开始计数)。如果 start 超过了 expression 的长度,则返回空字符串
    ('')。如果 start 为负数,SQL Server 会将其视为 1。
  • length:这是要提取的字符数。如果 length 为 0 或负数,则返回空字符串。如果 length 超过了 expression
    的剩余长度,则提取到字符串末尾。

示例
1. 从字符串常量中提取子字符串
假设我们有一个字符串 ‘Hello, World!’,我们可以使用 SUBSTRING() 来提取其中的部分:

SELECT SUBSTRING('Hello, World!', 8, 5) AS Substring;
-- 结果: 'World'

在这个例子中,SUBSTRING('Hello, World!', 8, 5) 从第 8 个字符开始,提取 5 个字符,结果是 ‘World’。

2. 使用表中的列
假设你有一个名为 employees 的表,其中有一列 email。你可以使用 SUBSTRING() 来提取电子邮件地址的域名部分:

SELECT email, SUBSTRING(email, CHARINDEX('@', email) + 1, LEN(email) - CHARINDEX('@', email)) AS Domain
FROM employees;

这段代码首先使用 CHARINDEX() 找到 @ 符号的位置,然后从 @ 符号后面开始提取直到字符串末尾的所有字符,从而得到域名。

3. 提取固定长度的子字符串
如果你知道要提取的子字符串长度是固定的,可以直接指定 start 和 length 参数:

SELECT SUBSTRING(phone_number, 1, 3) AS AreaCode
FROM customers;

这个查询会从 phone_number 列中提取前 3 个字符作为区号。

4. 处理 NULL 值
如果 expression 是 NULL,SUBSTRING() 函数将返回 NULL。你可以结合 ISNULL() 或 COALESCE() 函数来提供默认值:

SELECT ISNULL(SUBSTRING(phone_number, 1, 3), 'Unknown') AS AreaCode
FROM customers;

如果 phone_number 是 NULL,ISNULL() 将返回 ‘Unknown’。

5. 结合其他字符串函数
你可以将 SUBSTRING() 与其他字符串函数结合使用,以实现更复杂的逻辑。例如,提取文件名中的扩展名:

SELECT file_name, 
       SUBSTRING(file_name, CHARINDEX('.', file_name) + 1, LEN(file_name) - CHARINDEX('.', file_name)) AS Extension
FROM files;

这段代码会从 file_name 中提取最后一个 . 后面的所有字符作为文件扩展名。

6. 提取多段子字符串
如果你想提取多个段落的子字符串,可以嵌套多个 SUBSTRING() 函数。例如,从一个包含全名的字符串中提取姓和名:

SELECT full_name,
       SUBSTRING(full_name, 1, CHARINDEX(' ', full_name) - 1) AS FirstName,
       SUBSTRING(full_name, CHARINDEX(' ', full_name) + 1, LEN(full_name) - CHARINDEX(' ', full_name)) AS LastName
FROM persons;

这段代码假设 full_name 中只有一个空格分隔姓和名。

注意事项

  • 起始位置:SUBSTRING() 的起始位置是从 1 开始计数的,而不是从 0 开始。如果你习惯于从 0 开始计数的语言(如 C# 或
    Python),请特别注意这一点。
  • 超出范围:如果 start 超过了 expression 的长度,SUBSTRING() 返回空字符串。如果 length 超过了
    expression 的剩余长度,SUBSTRING() 提取到字符串末尾。
  • 非字符串类型:SUBSTRING()
    可以接受非字符串类型的输入,只要这些类型可以隐式转换为字符串。例如,整数或日期时间类型会被自动转换为字符串。
  • Unicode 字符串:对于 Unicode 字符串(如 NVARCHAR 类型),SUBSTRING()
    返回的是字符数,而不是字节数。每个 Unicode 字符通常是 2 个字节。

实用技巧

  • 动态计算起始位置和长度:在某些情况下,你可能需要根据其他条件动态计算 start 和 length 参数。例如,使用 PATINDEX()
    或 CHARINDEX() 函数来确定起始位置。
  • 处理多分隔符的情况:如果字符串中有多个分隔符(如逗号或空格),可以使用 STRING_SPLIT() 函数(适用于 SQL Server
    2016 及以上版本)将字符串拆分为多个部分,然后再使用 SUBSTRING() 进行处理。
  • SUBSTRING() 是一个非常强大的字符串处理函数,广泛应用于各种场景。掌握它的用法可以帮助你更高效地处理和操作字符串数据。

二、表

2.1向表中添加列

ALTER TABLE dbo.doc_exa 
ADD column_b VARCHAR(20) NULL, column_c INT NULL ;

2.2从表中删除列

ALTER TABLE dbo.doc_exb DROP COLUMN column_b;
GO

2.3将数据从一个表复制到另一个表

CREATE TABLE dbo.EmployeeSales  
( BusinessEntityID   varchar(11) NOT NULL,  
  SalesYTD money NOT NULL  
);  
GO  
INSERT INTO dbo.EmployeeSales  
    SELECT BusinessEntityID, SalesYTD   
    FROM Sales.SalesPerson;  
GO  

2.4 检索数据库的名称及其排序规则

select name , collation_name from sys.databases
  • 排序规则(Collation)

排序规则定义了字符数据的比较和排序方式。排序规则影响字符串的比较、排序以及大小写敏感性等。例如,不同的排序规则可能会导致相同的字符串在不同的数据库中比较结果不同。

三、常用操作

3.1 WITH 关键词

  • 用途:通过CTE将符合条件的记录集中在一个临时结果集中,以便后续操作。
DECLARE @PhoneNumber VARCHAR(50) = '18888888888';

WITH TableName AS
(
    SELECT * 
    FROM [T].[dbo].[Test] 
    WHERE ID = (SELECT ID 
                        FROM [T].[dbo].[Test]
                        WHERE Phone = @PhoneNumber)
)
DELETE FROM TableName 
WHERE Phone <> @PhoneNumber;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值