- 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/
您认为以下结果如何? SELECT CHARINDEX('space and /* comment */', 'Phrase with space and /* comment */') AS Mat
有一个列 name 我想从中创建一个新列。示例: name asd_abceur1mz_a asd_fxasdrasdusd3mz_a asd_abceur10yz_a asd_fxasdrasdus
我正在尝试使用“a”作为分隔符将此字符串分成不同的列 005031812180200000100aRemaining Inside Terminala Cassette 1(BIN1)/c:HTG 2
我有下面的 sql 查询,需要在 bigquery 上运行 select replace(substring(p.name, charindex(',', p.name), len(p.name)),
我有一列数据是这样的 DOESTOEIVSKI ALEXANDER JAMES JOYCE ROBERT LUDLUM MURAKAMI HARUKU 目标:使第一个字符串大写,其余小写,第二个字
有谁明白为什么我仍然得到 0 的结果: SELECT [KnowItAll].[dbo].[VSM_CanculateTermFrequency] ( 'hello hi hello by h
我有一个表 MsStaff 由几列组成。其中一列是 StaffName。 StaffName 数据包含双字姓名(如 'Edy Harsono')和三字姓名(如 'Dian Felita Tanoto'
我有一个表 MsStaff 由几列组成。其中一列是 StaffName。 StaffName 数据包含双字姓名(如 'Edy Harsono')和三字姓名(如 'Dian Felita Tanoto'
我一直在存储过程中使用 CHARINDEX 来检查 NVARCHAR(MAX) 类型的变量,但今天我发现 CHARINDEX有 8,000 字节的限制! 我找到这篇文章SQL CHARINDEX()
我的数据库中有一个字段,出于报告目的,我计划使用以下语句将其截断为 50 个字符。 SELECT (CASE WHEN (LEN(Notes) > 50) THEN SUBSTRING(Notes,
有人可以使用新的用户定义函数复制 CHARINDEX 吗? (使用指令) IF(CHARINDEX('(G)',v_username) = 0) THEN mysql版本。如果能够保持功能不变我的迁移
我在 SSIS 中有一个 Excel 源代码,其中有一列名为 [Name]其中有一个类似 Joe Bloggs 的条目 我想将 [Name] 分为 [Forename] 和 [Surname] 请问如
我们使用 Entity Framework 进行数据库访问,当我们“思考” LIKE 语句时 - 它实际上会生成 CHARINDEX 内容。因此,在我简化它们以在我们的特定服务器上证明一个点之后,这里
如何根据“-”字符拆分以下字符串? 所以如果我有这个字符串:LD-23DSP-1430 我怎么能把它分成这样的单独的列: LD 23DSP 1430 另外,如果需要(没有“-
我有一个关于 SQL SERVER charindex 函数的简单问题。 DECLARE @VAR1 varchar SET @VAR1 = 'abcdef' PRINT CHARINDEX('c',
我有一个字符串“some.file.name”,我想抓取“some.file”。 为此,我需要找到最后一次出现的“.”在一个字符串中。 我的解决方案是: declare @someStr varch
我有一个关于 SQL SERVER charindex 函数的简单问题。 DECLARE @VAR1 varchar SET @VAR1 = 'abcdef' PRINT CHARINDEX('c',
我有以下模型 public class Exchange { public int Id { get; set; } [Index("ExchangeIdx", 1)] pub
我想知道之间是否存在差异(除了引擎兼容性和可选事件) CHARINDEX (expressionToFind ,expressionToSearch [, start_location]) 和 INS
我需要将逗号分隔的字符串拆分为第二列我有下表: CL1 POS POS2 LENGHT ALLELE 1 3015108,30151
我是一名优秀的程序员,十分优秀!