子串并一起替换?

时间:2014-08-04 08:00:54

标签: sql sql-server tsql substring

我是T-SQL的新手。我想一起使用substringreplace,但它没有按预期工作, 或者可能还有一些我不知道的额外功能。

我有一个存储日期时间的列,格式如下:' 1393/03/03'。

但我希望像这样展示:' 930303' ,即我想要这些角色' 13'和' /'被省略。 我尝试了substringreplace,但它不起作用。

这是我的代码:

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

你能帮助我吗?

6 个答案:

答案 0 :(得分:1)

您可以使用CONVERT功能。

http://msdn.microsoft.com/en-us/library/ms187928.aspx

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

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

SELECT convert(NVARCHAR(50), CAST('1393/03/03' AS DATE), 12)

答案 1 :(得分:0)

尝试这种方式来测试我的解决方案:

SELECT SUBSTRING(REPLACE('1393/03/03','/',null),3,8)

并且您的专栏将是:

SELECT SUBSTRING(REPLACE(CreateDate,'/',null),3,8)

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

如果输入列的数据类型为DATETIMEDATETIME2(或任何DATE / TIME数据类型),则应将其转换为VARCHAR,然后替换/ }字符。 (DATETIME format styles

如果它已经是一个字符串(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 您的错误是:SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8)

SUBSTRING有3个参数:

  • expression(字符,二进制,文本,ntext或图像)
  • start(bigint)
  • length(bigint)

在您的查询中有4个参数,第三个是VARCHAR类型。使用您的解决方案,有效的expressoin是:SUBSTRING(REPLACE(CreateDate, '/', ''), 3, 6)(如果CreateDate是VARCHAR或NVARCHAR。如果它是DATETIME或DATETIME2,您应该使用上面显示的方法。)

答案 4 :(得分:0)

DECLARE @STR VARCHAR(50)='1393/03/03'

SELECT SUBSTRING(REPLACE(@STR,'/',''),3,LEN(@STR))enter code here

答案 5 :(得分:0)

尝试RIGHT功能

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