我正在使用SQL Server 2008.
我发现LEN函数在整数没有值时计算整数时不返回零 - 它返回1.
例如:
declare @int1 int
set @int1 = ''
select LEN(@int1)
Run Code Online (Sandbox Code Playgroud)
返回1而不是零!但整数是零长度!
为什么是这样?这是一个错误吗?
我正在尝试将邮政编码插入到我的数据库中,但去掉了下划线。我有一个名为 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'。我对正则表达式了解不多,所以任何想法都将不胜感激。提前致谢!
我有一个代码,它列出了数据库中数据的所有重复项
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) 并保留了其他重复项,这与我想要的相反。
我想弄清楚我需要在这里使用:删除,插入或更新.
基本上.
当主表更新时,我需要将一些数据写入历史表,并且只有当状态从某些内容更改为挂起或活动时才需要.
这就是我现在拥有的:
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)
所以我希望新数据保留在主表中,历史表将被覆盖的内容更新...现在它只是复制相同的信息.所以更新后,我的两个表都有相同的数据.
我有两列,年份和支付期(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,但我不能指望.