Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Substring - Fatal编程技术网

Sql 子串和替换在一起?

Sql 子串和替换在一起?,sql,sql-server,tsql,substring,Sql,Sql Server,Tsql,Substring,我是T-SQL的新手。我想同时使用子字符串和替换,但效果不理想, 或者可能有一些我不知道的额外功能 我有一列存储日期时间,格式如下:“1393/03/03” 但我想这样显示:'930303',也就是说,我想省略这些字符'13'和'/'。 我尝试了子字符串和替换,但它不起作用 这是我的密码: SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8) 您能帮助我吗?尝试以下方法来测试我的解决方案: SELECT SUBSTRING(RE

我是T-SQL的新手。我想同时使用
子字符串
替换
,但效果不理想, 或者可能有一些我不知道的额外功能

我有一列存储日期时间,格式如下:“1393/03/03”

但我想这样显示:'930303',也就是说,我想省略这些字符'13'和'/'。 我尝试了
子字符串
替换
,但它不起作用

这是我的密码:

SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8)

您能帮助我吗?

尝试以下方法来测试我的解决方案:

SELECT SUBSTRING(REPLACE('1393/03/03','/',null),3,8)
你的专栏将是:

SELECT SUBSTRING(REPLACE(CreateDate,'/',null),3,8)
试试这个:

SELECT REPLACE(SUBSTRING(CreateDate,2,8),'/','')

如果输入列的数据类型为
DATETIME
DATETIME2
(或任何日期/时间数据类型),则应将其转换为
VARCHAR
,然后替换
/
字符。()

如果它已经是一个字符串(VARCHAR),那么下面的解决方案就可以了

DECLARE @X DATETIME2 = '1393/03/03' -- Example for DATE/TIME data type
DECLARE @Y VARCHAR(32) = '1393/03/03' -- Example for VARCHAR data type

SELECT
    @X
    , @Y
    , REPLACE(CONVERT(VARCHAR(32), @X, 11), '/', '') -- Japan style
    , CONVERT(VARCHAR(32), @X, 12) -- ISO style
    , REPLACE(STUFF(@Y, 1, 2, ''), '/', '')
编辑

请注意,格式化不适用于数据库引擎,如果可能,请在前端应用程序中进行格式化

编辑2 您的错误是:
选择子字符串(CreateDate,2,REPLACE(CreateDate,“/”,“),8)

子字符串
有3个参数:

  • 表达式
    (字符、二进制、文本、ntext或图像)
  • 开始
    (bigint)
  • 长度
    (bigint)

在查询中有4个参数,第三个是VARCHAR类型。对于您的解决方案,有效的表达式是:
子字符串(REPLACE(CreateDate,“/”,”),3,6)
(如果CreateDate是VARCHAR或NVARCHAR。如果是DATETIME或DATETIME2,您应该使用上面显示的方法。)

您可以使用
CONVERT
函数

允许将日期从一种格式转换为另一种格式,在本例中为111-日本yyyy/mm/dd到12-ISO yymmdd

SELECT convert(NVARCHAR(50), GETDATE(), 12)

SELECT convert(NVARCHAR(50), CAST('1393/03/03' AS DATE), 12)
声明@STR VARCHAR(50)='1393/03/03'


选择子字符串(替换(@STR,“/”,”),3,LEN(@STR))
在此处输入代码

SELECT RIGHT(REPLACE(CreateDate,'/',''),6)

什么不起作用?错误是什么?参数数据类型nvarchar对于子字符串函数的参数3无效。+1是最佳答案:我正要键入:)是的,即使它不是公认的答案,我希望有人发现它有用!