字段值的字符串内容拆分为两列,其中括号里面的为一列,括号外为一列
SELECT i.存货编码, QUOTENAME([存货名称], '"') AS 存货名称, QUOTENAME([存货分类], '"') AS 存货分类, isnull(qc.iQuantity,0) 即时成品库存数, isnull(qb.iQuantity,0) 即时半成品库存数 , i.未结数, i.当月成品入库数 , i.当月半成品入库数 ,isnull(i.入库日期明细,'') 入库日期明细 FROM AA_Inventory_View_Short i LEFT join (select cinvcode,sum(iQuantity) as iQuantity from currentstock where cwhcode = '003' group by cInvCode ) qb on i.存货编码 = qb.cinvcode LEFT join (select cinvcode,sum(iQuantity) as iQuantity from currentstock where cwhcode = '001' group by cInvCode ) qc on i.存货编码 = qc.cinvcode LEFT JOIN v_shichangyuji_stock b ON i.存货编码 = b.cInvCode where i.存货编码 like '%A07%' sqlserver,请把上面的sql QUOTENAME([存货名称], '"') 字段值 的字符串的内容拆分为两列。括号里面的为一列,括号外为一列。 举例:ZM(101) 拆分为:ZM 和 101 格式如下 ZM(101) 请写sql代码要将 `QUOTENAME([存货名称], '"')` 字段值的字符串内容拆分为两列,其中括号里面的为一列,括号外为一列,
我们可以使用 SQL Server 的字符串函数 `CHARINDEX` 和 `SUBSTRING` 来实现。以下是修改后的 SQL 代码:
```sql
SELECT
i.存货编码,
-- 提取括号外的部分
CASE
WHEN CHARINDEX('(', QUOTENAME([存货名称], '"')) > 0
THEN SUBSTRING(QUOTENAME([存货名称], '"'), 2, CHARINDEX('(', QUOTENAME([存货名称], '"')) - 2)
ELSE REPLACE(QUOTENAME([存货名称], '"'), '"', '')
END AS 存货名称_括号外,
-- 提取括号内的部分
CASE
WHEN CHARINDEX('(', QUOTENAME([存货名称], '"')) > 0
THEN SUBSTRING(QUOTENAME([存货名称], '"'), CHARINDEX('(', QUOTENAME([存货名称], '"')) + 1, CHARINDEX(')', QUOTENAME([存货名称], '"')) - CHARINDEX('(', QUOTENAME([存货名称], '"')) - 1)
ELSE ''
END AS 存货名称_括号内,
QUOTENAME([存货分类], '"') AS 存货分类,
isnull(qc.iQuantity, 0) AS 即时成品库存数,
isnull(qb.iQuantity, 0) AS 即时半成品库存数,
i.未结数,
i.当月成品入库数,
i.当月半成品入库数,
isnull(i.入库日期明细, '') AS 入库日期明细
FROM
AA_Inventory_View_Short i
LEFT JOIN
(SELECT cinvcode, SUM(iQuantity) AS iQuantity
FROM currentstock
WHERE cwhcode = '003'
GROUP BY cInvCode) qb
ON
i.存货编码 = qb.cinvcode
LEFT JOIN
(SELECT cinvcode, SUM(iQuantity) AS iQuantity
FROM currentstock
WHERE cwhcode = '001'
GROUP BY cInvCode) qc
ON
i.存货编码 = qc.cinvcode
LEFT JOIN
v_shichangyuji_stock b
ON
i.存货编码 = b.cInvCode
WHERE
i.存货编码 LIKE '%A0x%';
```
代码解释:
1. `存货名称_括号外` 列:
- 使用 `CHARINDEX` 函数查找字符串中左括号 `(` 的位置。
- 如果存在左括号,则使用 `SUBSTRING` 函数从第二个字符开始提取到左括号前的部分。
- 如果不存在左括号,则直接使用 `REPLACE` 函数去掉双引号。
2. `存货名称_括号内` 列:
- 使用 `CHARINDEX` 函数分别查找左括号 `(` 和右括号 `)` 的位置。
- 如果存在左括号,则使用 `SUBSTRING` 函数提取左括号和右括号之间的部分。
- 如果不存在左括号,则返回空字符串。
这样就可以将 `QUOTENAME([存货名称], '"')` 字段值的字符串内容拆分为两列。
要将 `QUOTENAME([存货名称], '"')` 字段值的字符串内容拆分为两列,其中括号里面的为一列,括号外为一列,我们可以使用 SQL Server 的字符串函数 `CHARINDEX` 和 `SUBSTRING` 来实现。以下是修改后的 SQL 代码:
```sql
SELECT
i.存货编码,
-- 提取括号外的部分
CASE
WHEN CHARINDEX('(', QUOTENAME([存货名称], '"')) > 0
THEN SUBSTRING(QUOTENAME([存货名称], '"'), 2, CHARINDEX('(', QUOTENAME([存货名称], '"')) - 2)
ELSE REPLACE(QUOTENAME([存货名称], '"'), '"', '')
END AS 存货名称_括号外,
-- 提取括号内的部分
CASE
WHEN CHARINDEX('(', QUOTENAME([存货名称], '"')) > 0
THEN SUBSTRING(QUOTENAME([存货名称], '"'), CHARINDEX('(', QUOTENAME([存货名称], '"')) + 1, CHARINDEX(')', QUOTENAME([存货名称], '"')) - CHARINDEX('(', QUOTENAME([存货名称], '"')) - 1)
ELSE ''
END AS 存货名称_括号内,
QUOTENAME([存货分类], '"') AS 存货分类,
isnull(qc.iQuantity, 0) AS 即时成品库存数,
isnull(qb.iQuantity, 0) AS 即时半成品库存数,
i.未结数,
i.当月成品入库数,
i.当月半成品入库数,
isnull(i.入库日期明细, '') AS 入库日期明细
FROM
AA_Inventory_View_Short i
LEFT JOIN
(SELECT cinvcode, SUM(iQuantity) AS iQuantity
FROM currentstock
WHERE cwhcode = '003'
GROUP BY cInvCode) qb
ON
i.存货编码 = qb.cinvcode
LEFT JOIN
(SELECT cinvcode, SUM(iQuantity) AS iQuantity
FROM currentstock
WHERE cwhcode = '001'
GROUP BY cInvCode) qc
ON
i.存货编码 = qc.cinvcode
LEFT JOIN
v_shichangyuji_stock b
ON
i.存货编码 = b.cInvCode
WHERE
i.存货编码 LIKE '%A0x%';
```
代码解释:
1. `存货名称_括号外` 列:
- 使用 `CHARINDEX` 函数查找字符串中左括号 `(` 的位置。
- 如果存在左括号,则使用 `SUBSTRING` 函数从第二个字符开始提取到左括号前的部分。
- 如果不存在左括号,则直接使用 `REPLACE` 函数去掉双引号。
2. `存货名称_括号内` 列:
- 使用 `CHARINDEX` 函数分别查找左括号 `(` 和右括号 `)` 的位置。
- 如果存在左括号,则使用 `SUBSTRING` 函数提取左括号和右括号之间的部分。
- 如果不存在左括号,则返回空字符串。
这样就可以将 `QUOTENAME([存货名称], '"')` 字段值的字符串内容拆分为两列。