与SQL Server的不同之处

在达梦数据查询中的变量定义时,区别如下:

(1)一个批次查询中,只能有一个declare。

(2)不同变量之间、语句之间必须用分号分隔

(3)不能有@符号。

(4)定义变量之后的语句执行部分,必须用Begin和End包起来,且Begin和End只能出现一次。

(5)给变量赋值时直接用等号赋值,不可使用SET

DECLARE a int ; b int ;
BEGIN
    a=5;
    b=10;
    SELECT a*b;
END

达梦数据库字符串转数字,并附带默认值

DECLARE temp varchar; res int;
BEGIN
temp = '#{id}';
SELECT cast(case when ISNUMERIC(temp) then temp else 0 end as int) into  res;
select  res from dual;
END

sqlserver转换方法,带默认值的

declare @id0 INTEGER
set @id0 = isnull(try_convert(int,'#{id0}'),2025)

时间格式化方法

#sqlserver
FORMAT ( b.entrust_time, 'yyyyMM' )
#dameng
TO_CHAR ( b.entrust_time, 'yyyyMM' )

达梦劈开字符串操作

WITH t AS (
  SELECT '1,2,3,4' AS str FROM dual
)
SELECT REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) AS split_value
FROM t
CONNECT BY REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) IS NOT NULL
ORDER BY LEVEL;
#如果引用字段
SELECT REGEXP_SUBSTR(str_column, '[^,]+', 1, LEVEL) AS split_value
FROM your_table
CONNECT BY REGEXP_SUBSTR(str_column, '[^,]+', 1, LEVEL) IS NOT NULL
AND PRIOR rowid = rowid
ORDER BY LEVEL;

SQLserver劈开字符串方法

with vtype_row as(  
  select 1 id, '当前最大值,历史最大值' name1 
) 
SELECT t.id, s.value
FROM vtype_row t
CROSS APPLY STRING_SPLIT(t.name1, ',') s

SQL server按文字更新数据库记录顺序

with vtype_row as(  
  select 1 id, '张三,李四' name1 
) ,
good as (

select ROW_NUMBER() OVER (PARTITION BY id ORDER BY t.id) AS rnt,t.*,
  s.value
FROM vtype_row t
CROSS APPLY STRING_SPLIT(t.name1, ',') s),

data as (select a.*,b.rnt from  exa_person a left join good b on a.name = b.value WHERE a.[year] = 2025 and a.department_id = 612)

--select * from data


update s set s.rank = 621 + p.rnt
from exa_person s
left join data p on s.id=p.id WHERE s.[year] = 2025 and s.department_id = 612

达梦列转行操作


    SELECT 
        sensorId, 
        meaTime, 
        value_field, 
        value
    FROM (
        SELECT 
            sensorId, 
            meaTime, 
            ResValue1, 
            ResValue2, 
            ResValue3
        FROM SensorData
        WHERE STATUS IN (2, 4)
    ) data
    UNPIVOT (
        value FOR value_field IN (ResValue1, ResValue2, ResValue3)
    ) unpvt
    WHERE value IS NOT NULL