我是T-SQL的新手。我想一起使用substring
和replace
,但它没有按预期工作,
或者可能还有一些我不知道的额外功能。
我有一个存储日期时间的列,格式如下:' 1393/03/03'。
但我希望像这样展示:' 930303' ,即我想要这些角色' 13'和' /'被省略。
我尝试了substring
和replace
,但它不起作用。
这是我的代码:
SELECT SUBSTRING(CreateDate,2,REPLACE(CreateDate,'/',''),8)
你能帮助我吗?
答案 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)
如果输入列的数据类型为DATETIME
或DATETIME2
(或任何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)