Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 使用列中最长数据的长度设置子字符串长度_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 使用列中最长数据的长度设置子字符串长度

Sql 使用列中最长数据的长度设置子字符串长度,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在做一个子字符串,以获得与某个费用代码匹配的所有电子邮件地址。因为我事先不知道最大长度是多少,所以我总是使用太大的int,我想知道这是否会影响查询的性能 我需要的是获取包含最长EmployeeEmails数据的行的长度,并使用它设置@MAXINT DECLARE @MAXINT INT = 2147483646 SELECT JOB.JOBNUMBER AS ExpenseCode, substring( ( Select ',' + LOWER(EMP.ELEC

我正在做一个子字符串,以获得与某个费用代码匹配的所有电子邮件地址。因为我事先不知道最大长度是多少,所以我总是使用太大的int,我想知道这是否会影响查询的性能

我需要的是获取包含最长EmployeeEmails数据的行的长度,并使用它设置@MAXINT

DECLARE @MAXINT INT = 2147483646

SELECT 
JOB.JOBNUMBER AS ExpenseCode,
substring(
    (
        Select ',' + LOWER(EMP.ELECTRONICMAILADDRESS) AS [text()]
        From dbo.EMPLOYEE EMP 
            INNER JOIN ITEM on ITEM.ACCESSLEVELNAME = JOB.ACCESSLEVELNAME
        Where LOWER(EMP.NAME2 + '.' + EMP.NAME3) Collate SQL_Latin1_General_CP1253_CI_AI = ITEM.NAMEOFUSER
            AND GETDATE() < CASE WHEN EMP.DATEENDEMPLOYMENT = '' THEN '2099-01-01' ELSE EMP.DATEENDEMPLOYMENT END
        ORDER BY EMP.ROWID
        For XML PATH ('')
    ), 2, @MAXINT) EmployeeEmails
FROM JOB
ORDER BY JOB.JOBNUMBER
不要使用子字符串,请使用STUFF。因此,与其说是表达式,不如说是:

SUBSTRING((SELECT...),2,2147483646)
做:


STUFF通常用于从SQL Server上删除字符串的第一个字符。

@Cheon您知道接受问题答案会获得声誉积分吗?你应该试试看。
STUFF((SELECT...),1,1,'')