在SQL中格式化

时间:2016-08-24 07:44:05

标签: sql sql-server ms-access

您好我在SQL Server中尝试重新创建的Access查询(下面):

UPDATE tblProducts SET tblProducts.ProductCode = [tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000")
WHERE (((tblProducts.ProductCode) Is Null Or (tblProducts.ProductCode) <>[tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000")));

我在使用FORMAT功能时遇到了问题。

3 个答案:

答案 0 :(得分:5)

以下是一种进行格式化的方法:

UPDATE tblProducts 
    SET ProductCode = [ProductPrefix] +
                      RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5)
WHERE ProductCode Is Null OR
      ProductCode <> [ProductPrefix] + RIGHT('00000' + CAST(ProductId as VARCHAR(255)), 5);

实际上,为了防止出现问题,我将其称为:

WITH toupdate AS (
      SELECT p.*,
             ([ProductPrefix] +
               RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5)
             ) as new_ProductCode
      FROM tblProducts p
     )
UPDATE toupdate
    SET  ProductCode = new_ProductCode
    WHERE ProductCode Is Null OR
          ProductCode <> new_ProductCode;

答案 1 :(得分:2)

使用此代替SingletonConfigurationProvider

format([tblProducts].[ProductID], "00000")

答案 2 :(得分:2)

对于 SQL Server 2012 及更高版本,您可以使用:

const

STUFF的另一种方式( SQL Server(从2008年开始)):

UPDATE tblProducts 
SET ProductCode = [ProductPrefix] + Format([ProductID],'00000')
WHERE ProductCode IS NULL OR ProductCode != [ProductPrefix] + Format([ProductID],'00000');