- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一列数据是这样的
DOESTOEIVSKI ALEXANDER
JAMES JOYCE
ROBERT LUDLUM
MURAKAMI HARUKU
目标:使第一个字符串大写,其余小写,第二个字符串保持大写
我已经用查询 #1 完成了它:
SELECT (UPPER(LEFT(PARTPPHY.IDENTITE,1))
+LOWER(SUBSTRING( PARTPPHY.IDENTITE, 2, CHARINDEX( ' ', PARTPPHY.IDENTITE ) - 1))
+SUBSTRING(PARTPPHY.IDENTITE,CHARINDEX( ' ', PARTPPHY.IDENTITE ),DATALENGTH(PARTPPHY.IDENTITE))),PARTPPHY.IDENTITE)
AS IDENTITE
FROM PARTPPHY
#1 的问题是我有这个
DOESTOEIVSKI ALEXANDER
James JOYCE
Murakami HARUKU
ROBERT LUDLUM
我希望 DOESTOEIVSKI
或 ROBERT
得到相同的结果
我尝试了 ltrim,如下面的查询 #2 所示:
SELECT UPPER(LEFT(LTRIM(PARTPPHY.IDENTITE),1))
+LOWER(SUBSTRING(LTRIM(PARTPPHY.IDENTITE), 2, CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE)) - 1))
+SUBSTRING(LTRIM(PARTPPHY.IDENTITE),CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE) ),DATALENGTH(LTRIM(PARTPPHY.IDENTITE)))
AS IDENTITE
FROM PARTPPHY
问题是我有这个错误
Msg 537, level 16, State 2, Ligne 17 Parameter length non valid for LEFT or SUBSTRING.
然而,当我尝试使用查询 #3(见下文)时,一切都很好
SELECT UPPER(LEFT(LTRIM(' JEAN TOTOT'),1))
+LOWER(SUBSTRING(LTRIM(' JEAN TOTOT'), 2, CHARINDEX( ' ', LTRIM(' JEAN TOTOT')) - 1))
+SUBSTRING(LTRIM(' JEAN TOTOT'),CHARINDEX( ' ', LTRIM(' JEAN TOTOT') ),DATALENGTH(LTRIM(' JEAN TOTOT')))
谁能给我一个解释?
谢谢
更新:在Zohar的评论之后,我看了看字段的数据定义。这是一个身份...我认为它确实有所不同,但我不确定如何或为什么...
DDL:
CREATE TABLE [dbo].[PARTPPHY1](
[IU_PART_PP] [int] IDENTITY(1,1) NOT NULL,
[TITRE] [int] NULL,
[NOM_NAISSANCE] [varchar](100) NULL,
[NOM_USAGE] [varchar](100) NULL,
[PRENOM] [varchar](20) NULL,
[AUTRES_PRENOMS] [varchar](60) NULL,
[IDENTITE] AS ((([PRENOM]+' ')
+case when isnull([NOM_USAGE],'')=''
then [NOM_NAISSANCE] else [NOM_USAGE] end)
+case when nullif([NOM_USAGE],'') IS NULL then '' else (' (NEE '+[NOM_NAISSANCE])+')' end))
DML
INSERT INTO PARTPPHY (IU_PART_PP,NOM_NAISSANCE,PRENOM)
VALUES(1,'BOUDJENAH','MICHEL')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'','MIKE')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'DOE','JOHN')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'SMITH','STAN')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'OPRAH','')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'DESI','LU')
INSERT INTO PARTPPHY ([IU_PART_PP],[NOM_NAISSANCE],[PRENOM])
VALUES(1,'JORDAN MIKE',NULL)
最佳答案
下一行引起了问题,当 PRENOM 为空值时,CHARINDEX 将给出 0,因此 SUBSTRING 的最后一个值为 -1!
CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE)) - 1)
试试这个,它会首先检查字符串的两个部分是否可用,然后对两个字符串部分使用逻辑,否则使用其他逻辑。
SELECT IDENTITE,
CASE WHEN CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE)) > 0 THEN
UPPER(LEFT(LTRIM(PARTPPHY.IDENTITE),1))
+LOWER(SUBSTRING(LTRIM(PARTPPHY.IDENTITE), 2, CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE)) - 1 ))
+SUBSTRING(LTRIM(PARTPPHY.IDENTITE),CHARINDEX( ' ', LTRIM(PARTPPHY.IDENTITE) ),DATALENGTH(LTRIM(PARTPPHY.IDENTITE)))
ELSE
UPPER(LEFT(LTRIM(PARTPPHY.IDENTITE),1))
+ ISNULL(LOWER(STUFF(LTRIM(PARTPPHY.IDENTITE), 1,1, '')),'')
END
AS IDENTITE1
FROM PARTPPHY
关于sql - 使用 charindex 和 ltrim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220904/
在 SQL Server 中修剪字符串的两端时,是否存在性能差异,或者在构建where 子句? 例如: WHERE RTRIM(LTRIM(SalesPerson)) <> '' 最佳答案 您的查询可
Redis 的 ltrim 和 rpush 是否存在可能的竞争条件? 例如,假设我的 redis 列表有这些项目:[1, 2, 3, 4, 5] 然后我调用 ltrim list 4 -1这基本上应该
我需要删除 URL 的开头部分: $test = "price/edit.php"; echo ltrim($test,'price/'); 显示dit.php 如果你想摆弄的话,这里有一个键盘:ht
我正在尝试从列的标题后获取位置名称。职位名称的示例是“经理 - 迈阿密”。我正在尝试以下操作, SELECT UPPER(LTRIM('Manager - Miami', 'Manager - ')
我需要删除 URL 的开头部分: $test = "price/edit.php"; echo ltrim($test,'price/'); 显示dit.php 如果你想摆弄的话,这里有一个键盘:ht
我正在使用 jQuery 捕获编码的 URL。 我看起来像:#?var=asdasdasdasdasd 我需要去掉“#?”在字符串的开头。在 PHP 中我会使用 ltrim。我如何使用 jQuery
"; echo ltrim('12Hello World', '0123456789'); 给出输出: ello World Hello World 为什么?我知道这是一个字符数组,每个字符都被删除了
我试图使用 php ltrim 函数从字符串中剥离一些开始部分。它工作正常,直到它在冒号 : 之后得到一个 i 字符。如果它在冒号后找到 i,它会忽略 i 字符。我知道它可以用 substr 或任何其
这个问题在这里已经有了答案: ltrim strips more than needed (5 个答案) 关闭 4 年前。 如果我这样做: ltrim('53-34567', '53-'); ltr
我想从我网站的页面中删除 Search -。下面是我的代码示例: 输入: $search = "Search - echelon"; $trim = "Search - "; $result = lt
我有一列数据是这样的 DOESTOEIVSKI ALEXANDER JAMES JOYCE ROBERT LUDLUM MURAKAMI HARUKU 目标:使第一个字符串大写,其余小写,第二个字
我正在尝试用 C 编写一个左修剪函数。有人可以找出我在做什么错误吗 int main() { char string2[]=" wind"; ltrim(string2); int n
不确定我还能在哪里问这个问题...但我正在查看我们系统中的一些代码,并在我们的数据清理过程之一中遇到了这个... UPDATE #X SET Email = CASE
我只需要在查询的某些部分执行RTRIM(),但如果我执行 TRIM() 将会影响性能。 是Trim()更慢/更快/完全相同(甚至没有可以忽略不计的差异)与 RTRIM() 和 LTRIM() 相比?
我对 Oracle 还很陌生。 可以肯定地说LTRIM(RTRIM())完全可以被 TRIM() 取代如果我想替换 Oracle 11g 中的前导和尾随空格? 此外,当我尝试在使用 JPA 的查询中使
我正在尝试用 C 编写一个左修剪函数。有人可以找出我在做什么错误吗 int main() { char string2[]=" wind"; ltrim(string2); int n
我尝试了这段代码 - UPDATE Table SET Name = RTRIM(LTRIM(Name)) Name 的数据类型为 varchar(25) 前导空格和尾随空格都不会被删除。当我复制粘贴
原因:中间存在回车符或者换行符,所以要先将此符号替换掉; ? 1
SQL 语法仍然是我正在学习的东西。我收到此代码片段下方指出的错误。 SELECT CASE WHEN LTRIM(RTRIM(cLehmanNo)) =' ' THEN NULL
我有这个 nvarchar 字符串作为示例: declare @s as nvarchar(max) set @s = ' ##a# bc## ###' 所以我需要修剪空格以及 # 字符。 我怎
我是一名优秀的程序员,十分优秀!