0

我有这样的插入查询

INSERT INTO tbl_LandRigs (Company,Rig,[RigType] ,[DrawWorks],[TopDrive] ) VALUES 
(@Company,@Rig,@RigType ,@DrawWorks,@TopDrive )

现在我需要的是,TopDrive只有当数据是数字时,我才想将数据插入列。否则我想在该列中插入“0”。在 SQL 中是否可能?

4

5 回答 5

2
INSERT INTO tbl_LandRigs ([Company], [Rig], [RigType], [DrawWorks], [TopDrive])
VALUES (@Company, @Rig, @RigType, @DrawWorks, CASE WHEN ISNUMERIC(@TopDrive) = 1 THEN @TopDrive ELSE 0 END)

CASE在这里,我们将两者兼而有之ISNUMERIC

此外,它通常使其他开发人员(或以后的您自己)更容易与您对括号和空格的使用保持一致,即使在 SQL 代码中也是如此。

正如其他人所提到的,isnumeric可能会给您一些误报。如果可能的话,通常最好在输入进入数据库之前对其进行清理,在这种情况下可能不使用无类型数据。只有您知道您的输入,但如果您预计会出现问题,则有一些选择

于 2013-08-27T12:27:32.597 回答
1

您可以在 SQL Server 中调用 IsNumeric() 函数。小心科学记数法虽然...

于 2013-08-27T12:27:17.647 回答
1

请看这个:

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 

如果有任何帮助,请更新

于 2013-08-27T12:28:51.807 回答
1

在插入 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;
于 2013-08-27T12:29:21.403 回答
1

如果您只检查数字(无小数),请使用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。

于 2013-08-27T12:37:53.893 回答