小编Mat*_*lie的帖子

在评估零长度整数时,TSQL LEN函数返回1

我正在使用SQL Server 2008.

我发现LEN函数在整数没有值时计算整数时不返回零 - 它返回1.

例如:

declare @int1 int
set @int1 = ''
select LEN(@int1)
Run Code Online (Sandbox Code Playgroud)

返回1而不是零!但整数是零长度!

为什么是这样?这是一个错误吗?

sql t-sql sql-server

1
推荐指数
1
解决办法
776
查看次数

如何用SQL中的正则表达式用空格替换下划线

我正在尝试将邮政编码插入到我的数据库中,但去掉了下划线。我有一个名为 FeedDataSetMapping 的表,用于在插入字段之前映射字段:

INSERT INTO FeedDataSetMapping (

   [source_field]
  ,[database_field]
  ,[template_id]
  ,[conversion_id]
  ,[order_id]
  ,[values_group]
  ,[direct_value]
  ,[value_regex]
  ,[condition_regex]
  ,[split_separator]
  ,[enclosing_character]
  ,[cumulative_field]
  ,[cumulative_format])
  VALUES
  ('manufacturerId','manufacturer_Id',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('dealership','leasing_broker_name',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('manufacturersDealerId','supplier_ref',@template_id,0,0,null,null,19,null,null,null,null,null),
  ('address1','address1',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('address2','address2',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('postcode','post_code',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('telephone','telephone',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('fax','fax_number',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('email','email',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('website','web_address',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('NewCarSales','service_mask',@template_id,0,0,null,1,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null),
  ('UsedCarSales','service_mask',@template_id,0,0,null,2,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null),
  ('Servicing','service_mask',@template_id,0,0,null,8,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null),
  ('Repairs','service_mask',@template_id,0,0,null,16,null,'^(?!(?i:^0$|^n$|^no$|^f$|^false$|^$))',null,null,1,null),
  ('Longitude','longitude',@template_id,0,0,null,null,null,null,null,null,null,null),
  ('Latitude','latitude',@template_id,0,0,null,null,null,null,null,null,null,null)
Run Code Online (Sandbox Code Playgroud)

这已经包含了一些条件正则表达式,如果这个字段包含一些文本,它会分别将其转换为 true 或 false。我需要的是一个 condition_regex 去掉这些下划线并用空格替换它,即:'GDB_A45'to 'GDB A45'。我对正则表达式了解不多,所以任何想法都将不胜感激。提前致谢!

regex sql t-sql sql-server

1
推荐指数
1
解决办法
2768
查看次数

删除重复项并保留 MAX(id) mysql

我有一个代码,它列出了数据库中数据的所有重复项

SELECT MAX(id) id 
FROM el_student_class_relation 
GROUP BY student_id, class_id 
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

现在,我试图保留 MAX(id),然后应删除其余的重复项

我尝试了代码

DELETE us 
FROM el_student_class_relation us
INNER JOIN(SELECT MAX(id) id 
            FROM el_student_class_relation 
            GROUP BY student_id, class_id HAVING COUNT(*) > 1) t ON t.id = us.id
Run Code Online (Sandbox Code Playgroud)

但它删除了 MAX(ID) 并保留了其他重复项,这与我想要的相反。

sql mariadb

1
推荐指数
1
解决办法
328
查看次数

SQL触发器 - 已删除或已更新?或者别的什么?

我想弄清楚我需要在这里使用:删除,插入或更新.

基本上.

当主表更新时,我需要将一些数据写入历史表,并且只有当状态从某些内容更改为挂起或活动时才需要.

这就是我现在拥有的:

ALTER TRIGGER [dbo].[trg_SourceHistory]  ON [dbo].[tblSource]
FOR UPDATE AS  
    DECLARE @statusOldValue char(1) 
    DECLARE @statusNewValue char(1)

    SELECT @statusOldValue = statusCode FROM deleted 
    SELECT @statusNewValue= statusCode FROM updated

    IF (@statusOldValue <> @statusNewValue) AND 
       (@statusOldValue = 'P' or @statusOldValue = 'A')
    BEGIN TRY
       INSERT * INTO tblHistoryTable)  
           select * from [DELETED]
Run Code Online (Sandbox Code Playgroud)

所以我希望新数据保留在主表中,历史表将被覆盖的内容更新...现在它只是复制相同的信息.所以更新后,我的两个表都有相同的数据.

sql sql-server triggers sqltransaction

0
推荐指数
2
解决办法
5343
查看次数

SQL Server之间的语句

我有两列,年份和支付期(1,2,3,4 ......).我正在绞尽脑汁试图弄清楚如何根据这些做一个介于两者之间.

比如说我有:

2017      1
2017      2
2017      3
2017      4
-------------v   
2017      5
2017      6
...
2017      51
2017      52 (typically, not guaranteed to be 52 periods)
2018      1
2018      2
2018      3
2018      4
-------------^
2018      5
...
Run Code Online (Sandbox Code Playgroud)

我想选择2017(5)和2018(4)之间的所有行,我该怎么做?我尝试了几种不同的方法,但无法弄明白.薪酬期通常是1-52,但我不能指望.

sql sql-server between

0
推荐指数
1
解决办法
49
查看次数

标签 统计

sql ×5

sql-server ×4

t-sql ×2

between ×1

mariadb ×1

regex ×1

sqltransaction ×1

triggers ×1