sql server字符串类型转换为整形

cherish_55 2014-05-26 11:53:55
数据库两个表做外连, 主表A 的DESCRIPTION字段是nvarchar类型的,从表B的ID是自增整形。
A 表的数据可能存在这样的情况:

A:
ID description
1 this is a sample
2 93.0
3 93

B:
ID name
1 test
... .....
93 93name

这样A left join B 的关联条件是:CONVERT( A.description AS INT) = B.ID
93.0 的记录报错,提示93.0不能转换成整形。

我想要A表的第二条记录和第三条记录都在结果集里,大家都怎么转啊?


...全文
902 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
极品老土豆 2014-05-26
  • 打赏
  • 举报
回复


select cast(cast ('93.0' as decimal(9,2)) as int)

/*

-----------
93

(1 行受影响)


*/
以学习为目的 2014-05-26
  • 打赏
  • 举报
回复
你这个 description字段的值有什么规律么,就你给出的数据,可以用charindex判断截取小数点前的数值再来关联B表
jiajiaren 2014-05-26
  • 打赏
  • 举报
回复
引用 2 楼 cherish_55 的回复:
[quote=引用 1 楼 jiajiaren 的回复:]
 

IF  OBJECT_ID(N'A') IS NOT NULL
DROP TABLE  A
CREATE TABLE A (ID INT IDENTITY(1,1),DESCRIPTION VARCHAR(50))
INSERT INTO A SELECT 'this is a sample'
UNION ALL SELECT '93.0'
UNION ALL SELECT '93'

GO

IF  OBJECT_ID(N'B') IS NOT NULL
DROP TABLE  B
GO
CREATE TABLE B (ID INT,name VARCHAR(50))
INSERT INTO B SELECT 1,'test'
UNION ALL SELECT 93, '93NAME'
 
 -----------------------------------------查询---------------------------------------------
 
 SELECT A.* FROM  A, B WHERE   REPLACE(A.DESCRIPTION,'.0','')=CONVERT(VARCHAR(10),B.ID)
 
 
/*
 (2 行受影响)
ID          DESCRIPTION
----------- --------------------------------------------------
2           93.0
3           93
*/
你用replace啊,我不能确定数据是不是都是这样的,93.0,维护项目。我把等号两边都转了,转成decimal[/quote] this is a sample 你能转成转成decimal[???
  • 打赏
  • 举报
回复

convert(int,'93.0')
你的第一行 也是字符,则么转。
  • 打赏
  • 举报
回复
this is a sample 是你的一行不能转换成整数吧
cherish_55 2014-05-26
  • 打赏
  • 举报
回复
引用 1 楼 jiajiaren 的回复:
 

IF  OBJECT_ID(N'A') IS NOT NULL
DROP TABLE  A
CREATE TABLE A (ID INT IDENTITY(1,1),DESCRIPTION VARCHAR(50))
INSERT INTO A SELECT 'this is a sample'
UNION ALL SELECT '93.0'
UNION ALL SELECT '93'

GO

IF  OBJECT_ID(N'B') IS NOT NULL
DROP TABLE  B
GO
CREATE TABLE B (ID INT,name VARCHAR(50))
INSERT INTO B SELECT 1,'test'
UNION ALL SELECT 93, '93NAME'
 
 -----------------------------------------查询---------------------------------------------
 
 SELECT A.* FROM  A, B WHERE   REPLACE(A.DESCRIPTION,'.0','')=CONVERT(VARCHAR(10),B.ID)
 
 
/*
 (2 行受影响)
ID          DESCRIPTION
----------- --------------------------------------------------
2           93.0
3           93
*/
你用replace啊,我不能确定数据是不是都是这样的,93.0,维护项目。我把等号两边都转了,转成decimal
jiajiaren 2014-05-26
  • 打赏
  • 举报
回复
 

IF  OBJECT_ID(N'A') IS NOT NULL
DROP TABLE  A
CREATE TABLE A (ID INT IDENTITY(1,1),DESCRIPTION VARCHAR(50))
INSERT INTO A SELECT 'this is a sample'
UNION ALL SELECT '93.0'
UNION ALL SELECT '93'

GO

IF  OBJECT_ID(N'B') IS NOT NULL
DROP TABLE  B
GO
CREATE TABLE B (ID INT,name VARCHAR(50))
INSERT INTO B SELECT 1,'test'
UNION ALL SELECT 93, '93NAME'
 
 -----------------------------------------查询---------------------------------------------
 
 SELECT A.* FROM  A, B WHERE   REPLACE(A.DESCRIPTION,'.0','')=CONVERT(VARCHAR(10),B.ID)
 
 
/*
 (2 行受影响)
ID          DESCRIPTION
----------- --------------------------------------------------
2           93.0
3           93
*/

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧