请求sql oracle

请求sql oracle,sql,oracle11g,Sql,Oracle11g,我必须在甲骨文上写一个请求。 我已经创建了一个可以包含40个字符的字段。 我必须用来自3个不同表的3个字段的数据对其进行fulfield。 这是我的规则: field1=field2+“”+field3+“”+field4 如果我的连接超过40个字符,我必须这样做: -field1=field2+“'”+trunc将字段3串联为长度40,此字段的最小值为8+“'”+field4 如果仍然超过40个字符,我必须这样做: 字段1=Trunc串联的字段2为40+“”+Trunc字段3为8+“”+fi

我必须在甲骨文上写一个请求。 我已经创建了一个可以包含40个字符的字段。 我必须用来自3个不同表的3个字段的数据对其进行fulfield。 这是我的规则:

field1=field2+“”+field3+“”+field4

如果我的连接超过40个字符,我必须这样做:

-field1=field2+“'”+trunc将字段3串联为长度40,此字段的最小值为8+“'”+field4

如果仍然超过40个字符,我必须这样做:

  • 字段1=Trunc串联的字段2为40+“”+Trunc字段3为8+“”+field4
我没有成功地写下这样的请求

任何人都可以帮忙。
我是sql方面的新手

字段3的长度应为
40-2-len(field2)-len(field4)
,但至少应为8个字符,如果长度小于8,则至少应为字段3的长度,因此可计算为:

greatest(least(8, lengthc(field3)), 38 - lengthc(field2) - lengthc(field4))
field2
的长度可以计算为:

least(lengthc(field2), 38 - x - lengthc(field4))
其中
x
字段3
的长度

因此,获取
field1
值的表达式为:

substr(field2, 1, least(lengthc(field2), 38 - greatest(least(8, lengthc(field3)), 38 - lengthc(field2) - lengthc(field4)) - lengthc(field4)))
|| ' '
|| substr(field3, 1, greatest(least(8, lengthc(field3)), 38 - lengthc(field2) - lengthc(field4)))
|| ' '
|| field4

对于字符串连接,请使用| |;要截断字符串,请使用SUBSTR()。在你给问题添加代码之前,我投票支持搁置这个问题。谢谢你。我不懂第一句话。它似乎有更多的元素。@user3438349:substr的第三个参数相当长。这是上面表达式中的第二个,其中用第一个表达式替换
x
。由于
field2
的长度取决于
field3
的长度,因此必须重复该表达式。谢谢,Guffa。我已经尝试了你的请求,它是有效的。但我需要知道如何在包装sql中处理request@user3438349:那将是最容易的部分。有关使用联接进行更新的示例,请参见此问题: