Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
如何编写TSQL替换函数来替换第一个表达式?_Sql_Tsql - Fatal编程技术网

如何编写TSQL替换函数来替换第一个表达式?

如何编写TSQL替换函数来替换第一个表达式?,sql,tsql,Sql,Tsql,我正在使用SSMS 2008,并且正在寻找一种根据以下逻辑替换记录的方法。我想从问号前的一列中列出所有内容。当前列数据示例: SUICIDAL? If yes, please describe HOMICIDAL? If yes, please describe the following PSYCHOTIC BEHAVIOR? If yes, please describe. If no then? ... 我想改为: SUICIDAL? HOMICIDAL? PSYCHOTIC BEHA

我正在使用SSMS 2008,并且正在寻找一种根据以下逻辑替换记录的方法。我想从问号前的一列中列出所有内容。当前列数据示例:

SUICIDAL? If yes, please describe
HOMICIDAL? If yes, please describe the following
PSYCHOTIC BEHAVIOR? If yes, please describe.  If no then?
...
我想改为:

SUICIDAL?
HOMICIDAL?
PSYCHOTIC BEHAVIOR?
...
注意,它应该只包含第一个问号之前的所有内容,因此在第三条记录中,它应该只返回“精神病行为”,而不是所有以“then”结尾的内容

如何编写此代码?我在TSQL中尝试了以下表达式,但不起作用:

replace('?%',[test_details].[test_setup_details_caption],'?')
对于SELECT,只需使用

CASE 
    WHEN CHARINDEX('?', myCol) > 0 
             THEN LEFT(myCol, CHARINDEX('?', myCol)-1) 
    ELSE MyCol 
END
对于SELECT,只需使用

CASE 
    WHEN CHARINDEX('?', myCol) > 0 
             THEN LEFT(myCol, CHARINDEX('?', myCol)-1) 
    ELSE MyCol 
END
尝试:

尝试:


谢谢各位。我喜欢这个答案,因为它比较短。但是,我需要删除“-1”,而不是上面的内容。所以它是这样写的:选择左边(@x,CHARINDEX('?',@x)),谢谢大家。我喜欢这个答案,因为它比较短。但是,我需要删除“-1”,而不是上面的内容。所以它的内容是:选择左(@x,CHARINDEX('?',@x))
DECLARE @x varchar(100) = 'PSYCHOTIC BEHAVIOR? If yes, please describe.  If no then?'

SELECT LEFT(@x,CHARINDEX('?',@x)-1)