这是我第一次在这里发帖,我是一名基本的SQL用户,需要帮助。
我有一个varchar
列,用于存储如下数据:
Year.Docid
2007.000000001
2007.000000002
2007.000000003
2007.000000004
2007.000000005
2007.000000006
我需要将此数据加入到另一个没有小数点后全零的表中,有人可以告诉我如何使数据看起来如下所示:
Year Docid
2007.1
2007.2
2007.3
2007.4
2007.5
2007.6
我正在使用MICROSOFT SQL SERVER 2012
答案 0 :(得分:3)
如果格式是固定的,即YYYY.NNNNNNNNN
,您可以获取最后9个字符,将它们转换为int
,将结果转换回varchar
并连接回第一个5个字符:
LEFT([Year.Docid], 5) + CAST(CAST(RIGHT([Year.Docid], 9) AS int) AS varchar(10))
但是,在两个表中将Year和Docid存储为两个单独的int
列会更有意义。只为输出组装它们比每次和加入它的结果时更容易组装它们。
答案 1 :(得分:0)
将长格式转换为短格式:
SELECT LEFT('2007.000000001',5) + CAST(CAST(RIGHT('2007.000000001',LEN('2007.000000001')-5) AS int)AS VARCHAR)
...
要在联接中使用它:
SELECT
...
FROM
TABLE_1 T1
INNER JOIN TABLE_2 T2
ON LEFT(T1.pk,5) + CAST(CAST(RIGHT(T1.pk,LEN(T1.pk)-5) AS int)AS VARCHAR) = T2.pk
答案 2 :(得分:0)
在SQL Server中,假设两列都是varchar,这样的事情应该是:
select *
from table_1 t1
join table_2 t2 on t2.docid = left(t2.docid,4)
+ '.'
+ convert(varchar,convert(int,right( t2.docid, len(t2.docid)-5 )))
您应该记住,将一个表的列设为表达式意味着对于该表/列,查询优化器不能使用查询计划中的任何索引。
答案 3 :(得分:0)
这是一项工作,但是完成了从点右侧删除零的任务:
SELECT SUBSTRING(YearDocid, 0, CHARINDEX('.', yearDocId)) +
REPLACE(SUBSTRING(yearDocId,
CHARINDEX('.', yearDocId),
LEN(yearDocID)),
'0', '')
FROM tab1;
答案 4 :(得分:-1)
SELECT CONCAT(PARSENAME([Col_Varchar],2),'。',CONVERT(INT,PARSENAME([Col_Varchar],1)))FROM Tbl_sample