SQL Server 常用命令:触发器、替换函数与日期转换

概述

整理 SQL Server 开发中常用的触发器编写、字符串替换和日期格式化命令,适合日常开发和快速参考。

一、触发器(Trigger)

当指定表的指定列发生 UPDATE 时自动执行:

-- 创建触发器
CREATE TRIGGER trg_update_contract
ON stock_move_line
AFTER UPDATE
AS
BEGIN
    IF UPDATE(sale_order_line_id)
    BEGIN
        UPDATE stock_move_line
        SET contract = (
            SELECT origin FROM sale_order
            WHERE ID = (
                SELECT sale_order_id FROM sale_order_line
                WHERE ID = inserted.sale_order_line_id
            )
        )
        FROM inserted
        WHERE stock_move_line.ID = inserted.ID
          AND inserted.sale_order_line_id > 0
    END
END

关键概念:

  • inserted 虚拟表:存放 UPDATE 后的新数据
  • deleted 虚拟表:存放 UPDATE 前的旧数据
  • UPDATE(column) 函数:检测指定列是否被修改

二、REPLACE 替换函数

-- 删除指定字符
SELECT REPLACE("你好啊", "啊", "");  -- 结果:你好

-- 替换字符
SELECT REPLACE("2024/05/16", "/", "-");  -- 结果:2024-05-16

-- 嵌套使用
SELECT REPLACE(REPLACE("A-B-C", "-", ""), " ", "");  -- 去掉横线和空格

三、日期格式化 CONVERT

-- 格式码 11 → yy/mm/dd
SELECT CONVERT(nvarchar(80), GETDATE(), 11);  -- 24/05/16

-- 格式码 23 → yyyy-mm-dd(ISO标准)
SELECT CONVERT(nvarchar(80), GETDATE(), 23);  -- 2024-05-16

-- 格式码 112 → yyyymmdd
SELECT CONVERT(nvarchar(80), GETDATE(), 112); -- 20240516

常用 CONVERT 格式码速查

格式码输出格式示例
11yy/mm/dd24/05/16
23yyyy-mm-dd2024-05-16
101mm/dd/yyyy05/16/2024
112yyyymmdd20240516
120yyyy-mm-dd hh:mi:ss2024-05-16 14:30:00

四、其他常用函数

-- 字符串截取
SELECT SUBSTRING("Hello World", 1, 5);  -- Hello

-- 获取字符串长度
SELECT LEN("你好世界");  -- 4

-- NULL 值处理
SELECT ISNULL(字段名, "默认值");

-- 类型转换
SELECT CAST("123" AS INT);
SELECT CONVERT(INT, "123");

标签: