仅在SQL中使用数字时插入表中

时间:2013-08-27 12:24:45

标签: sql sql-server-2008

我有一个像这样的插入查询

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

现在我需要的是,我只想在数据是数字的情况下将数据插入到列TopDrive中。我想在该列中插入“0”。是否可以在SQL中使用?

5 个答案:

答案 0 :(得分: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)

我们正在充分利用CASEISNUMERIC

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

正如其他人所说,isnumeric可能会给你一些false positives。如果可能的话,通常最好在输入到达数据库之前对输入进行清理,可能是在这种情况下不使用非类型化数据。只有您知道自己的输入,但如果您预料到问题,请there are some options

答案 1 :(得分:1)

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

答案 2 :(得分: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 

更新任何帮助

答案 3 :(得分:1)

在插入sql之前,检查一下是否编号link

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从这个答案中指出的那样:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
number = [formatter numberFromString:string];
status = number != nil;

答案 4 :(得分: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表示某些不是数字的字符,例如加号(+),减号( - )和有效货币符号,例如美元符号($)。