Sql 我需要删除小数点后的前导零

Sql 我需要删除小数点后的前导零,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,这是我第一次在这里发帖,我是一个基本的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 我需要将此数据连接到另一个表中,该表在小数点后没有所有的零,请有人告诉我如何使数据看起

这是我第一次在这里发帖,我是一个基本的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
我需要将此数据连接到另一个表中,该表在小数点后没有所有的零,请有人告诉我如何使数据看起来像下面的那样:

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将长格式转换为短格式:

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

如果格式是固定的,即
YYYY.nnnnnnn
,则只需获取最后9个字符,将其转换为
int
,将结果转换回
varchar
,并连接回前5个字符:

LEFT([Year.Docid], 5) + CAST(CAST(RIGHT([Year.Docid], 9) AS int) AS varchar(10))

然而,在这两个表中,将Year和Docid存储为两个独立的
int
列更有意义。仅为输出而组装它们要比每次都进行此处理并结合其结果容易得多。

在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 )))

您应该记住,将一个表的列设置为表达式意味着对于该表/列,查询优化器不能在查询计划中使用任何索引。

这是一项工作量,但可以完成从点的右侧删除零的任务:

SELECT SUBSTRING(YearDocid, 0, CHARINDEX('.', yearDocId)) + 
       REPLACE(SUBSTRING(yearDocId, 
                         CHARINDEX('.', yearDocId), 
                         LEN(yearDocID)), 
               '0', '')
FROM tab1;

从Tbl_示例中选择CONCAT(PARSENAME([Col_Varchar],2),“.”,CONVERT(INT,PARSENAME([Col_Varchar],1)),您使用的是哪个数据库?示例1:示例2:@LC:OP不想对number@LJ-我不认为这是绕圈子的。这个专栏是一个瓦查尔吗?像宝石一样工作!!非常感谢。