首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在连接过程中将文本转换为int (强制转换?)

在连接过程中将文本转换为int (强制转换?)
EN

Stack Overflow用户
提问于 2012-06-04 08:48:41
回答 3查看 6.7K关注 0票数 0

我有一个查询,看起来像这样:

代码语言:javascript
复制
SELECT p.prodname, p.prodcode, o.vovalue, p.productid, i.imageprodid, c.vcstock, p.prodcatids, t.catname
FROM isc_products p
LEFT OUTER JOIN isc_product_variation_combinations c ON c.vcproductid = p.productid
LEFT OUTER JOIN isc_product_variations v ON v.variationid = c.vcvariationid
LEFT OUTER JOIN isc_product_variation_options o ON o.voptionid = c.vcoptionids
LEFT OUTER JOIN isc_product_images i ON i.imageprodid = p.productid
LEFT OUTER JOIN isc_categories t ON t.categoryid = p.prodcatids
WHERE c.vcstock >1
AND  i.imageprodid IS NULL
ORDER BY ca.catname

我正在尝试检索列中的类别名称(t.catname)。由于t.categoryid = p.prodcatids的连接,它返回一个空值。

p.prodcatids是文本(utf8_general),t.categoryid是int(11)。

如何转换(强制转换?)p.prodcatids作为int11,这样它就会加入到t.categoryid上?

EN

Stack Overflow用户

发布于 2012-06-04 10:08:45

只有几个音符。

事实上,您可以进行强制转换以获得所需的结果,但这并不能替代具有适当的数据结构。您应该使所有外键都与主键具有相同的类型。特别是,这会对查询优化器造成严重破坏,并且通常会保证嵌套循环连接(效率最低的一种)。

此外,当您遇到这种情况时,从字符数据类型转换出来通常更准确。这是因为cast函数可能与其他字段不完全匹配。例如,"100“不等于"100.00”。

然而,这引入了转换失败的可能性。某些数据库(例如SQL Server )提供了诸如isnumeric和isdate之类的函数来处理这种情况。其他人则不这样做。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10875196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档