我有这样的插入查询
INSERT INTO tbl_LandRigs (Company,Rig,[RigType] ,[DrawWorks],[TopDrive] ) VALUES
(@Company,@Rig,@RigType ,@DrawWorks,@TopDrive )
现在我需要的是,TopDrive
只有当数据是数字时,我才想将数据插入列。否则我想在该列中插入“0”。在 SQL 中是否可能?
我有这样的插入查询
INSERT INTO tbl_LandRigs (Company,Rig,[RigType] ,[DrawWorks],[TopDrive] ) VALUES
(@Company,@Rig,@RigType ,@DrawWorks,@TopDrive )
现在我需要的是,TopDrive
只有当数据是数字时,我才想将数据插入列。否则我想在该列中插入“0”。在 SQL 中是否可能?
INSERT INTO tbl_LandRigs ([Company], [Rig], [RigType], [DrawWorks], [TopDrive])
VALUES (@Company, @Rig, @RigType, @DrawWorks, CASE WHEN ISNUMERIC(@TopDrive) = 1 THEN @TopDrive ELSE 0 END)
此外,它通常使其他开发人员(或以后的您自己)更容易与您对括号和空格的使用保持一致,即使在 SQL 代码中也是如此。
正如其他人所提到的,isnumeric
可能会给您一些误报。如果可能的话,通常最好在输入进入数据库之前对其进行清理,在这种情况下可能不使用无类型数据。只有您知道您的输入,但如果您预计会出现问题,则有一些选择。
您可以在 SQL Server 中调用 IsNumeric() 函数。小心科学记数法虽然...
请看这个:
IF Isnumeric(@TopDrive) = 1
BEGIN
INSERT INTO TBL_LANDRIGS
(COMPANY,
RIG,
[RIGTYPE],
[DRAWWORKS],
[TOPDRIVE])
VALUES (@Company,
@Rig,
@RigType,
@DrawWorks,
@TopDrive )
END
ELSE
BEGIN
INSERT INTO TBL_LANDRIGS
(COMPANY,
RIG,
[RIGTYPE],
[DRAWWORKS],
[TOPDRIVE])
VALUES (@Company,
@Rig,
@RigType,
@DrawWorks,
0 )
END
如果有任何帮助,请更新
在插入 sql 之前,您检查它是否编号检查此链接
bool status;
NSScanner *scanner;
NSString *testString;
double result;
scanner = [NSScanner scannerWithString:testString];
status = [scanner scanDouble:&result];
status = status && scanner.scanLocation == string.length;
如果status == YES
那么字符串是全数字的。
或者正如@Dave 从这个 SO 答案中指出的那样:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
number = [formatter numberFromString:string];
status = number != nil;
如果您只检查数字(无小数),请使用like '%[^0-9]%'
如下;
Insert into tbl_LandRigs (Company, Rig, [RigType], [DrawWorks], [TopDrive] )
Values (@Company, @Rig, @RigType, @DrawWorks,
Case when @TopDrive like '%[^0-9]%' then 0 else @TopDrive end )
请小心使用ISNUMERIC(),因为它会为某些非数字字符(例如加号 (+)、减号 (-))和有效的货币符号(例如美元符号 ($))返回 1。