Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2005-向少于10个字符的记录添加区号_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

SQL Server 2005-向少于10个字符的记录添加区号

SQL Server 2005-向少于10个字符的记录添加区号,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,有人能想出一个SQL例程或想法,系统地将区号附加到SQL Server 2005数据库中没有区号的每个字段的开头吗 也许有人可以告诉我们如何只返回长度小于10个字符的行,以及如何将3位区号附加到每个字段字符串的开头 谢谢 DECLARE@AreaCode字符(3) DECLARE @AreaCode char(3) SET @AreaCode = 'XXX' UPDATE myTable SET myField = @AreaCode + myField WHERE LEN(myField)

有人能想出一个SQL例程或想法,系统地将区号附加到SQL Server 2005数据库中没有区号的每个字段的开头吗

也许有人可以告诉我们如何只返回长度小于10个字符的行,以及如何将3位区号附加到每个字段字符串的开头

谢谢

DECLARE@AreaCode字符(3)
DECLARE @AreaCode char(3)
SET @AreaCode = 'XXX'

UPDATE myTable
SET myField = @AreaCode + myField
WHERE LEN(myField) < 10
AND myField NOT LIKE @AreaCode + '%'
设置@AreaCode='XXX' 更新myTable 设置myField=@AreaCode+myField 其中LEN(myField)<10 myField与@AreaCode+'%不同

这将适用于SQL Server。

理想情况下,区号将是数据库中的一个单独的列。因为它不是这样设计的:

UPDATE
     PhoneNumbers
SET
     phone_number = '123' + phone_number
WHERE
     LEN(phone_number) = 7
当然,如果人们已经格式化了电话号码,那么这就行不通了。我需要更多地了解您表中的数据。您可能需要执行以下操作:

UPDATE
     PhoneNumbers
SET
     phone_number = '(123) ' + phone_number
WHERE
     LEN(REPLACE(REPLACE(REPLACE(REPLACE(phone_number, '-', ''), '(', ''), ')', ''), '.', '') = 7

如果人们输入像“ext.7”这样的东西,那会使事情更加复杂。看看为什么打出一个电话号码比只写一列更好?;)

我可能会添加一些东西,比如
。。。myField不像@AreaCode+“%”
尽管如此,本地交换不可能与区号相同吗?(我不相信有任何通用的验证可以阻止这种情况发生。)换句话说,如果数字已经小于10,即使前三位数字与@AreaCode匹配,它们也不一定是区号。你如何判断正确的区号呢?这两个都是很好的答案。非常感谢!