将SQL Server转换为Oracle Select查询

时间:2015-05-15 14:14:45

标签: vb.net oracle sql-server-2008

我有一个Select查询:

SELECT 
    SAMPLE_NUMBER, SAMPLE_TYPE, STORAGE_ADDRESS, EXTERNAL_NUMBER 
FROM 
    SYSTMX2.TM2_SAMPLES

我需要的是添加两个包含.Net语法代码结果的列,这样我最终会得到类似"

的内容
SELECT 
    SAMPLE_NUMBER, SAMPLE_TYPE, STORAGE_ADDRESS, EXTERNAL_NUMBER, 
    SomeCodearound(STORAGE_ADDRESS) as RowPosition, 
    SomeCodearound(STORAGE_ADDRESS) as ColumnPosition 
FROM 
    SYSTMX2.TM2_SAMPLES

行和列位置取决于它们落入9 x 9网格的位置。顶部有9个数字,侧面有9个数字。这将是一个可容纳81个小瓶的实验室标本盒。每个样品瓶的编号从1到81,是STORAGE_ADDRESS值的最后三个字符,类似于FR2-S01-R01-001或FR2-S01-R01-081。样品瓶编号1将在第1列和第1行;第9行第9列中的样品瓶81.该行的.net代码是取STORAGE_ADDRESS的最后三个字符并使用小数进行测试。

TryParse(STORAGE_ADDRESS.Substring(STORAGE_ADDRESS.Length - 3), value)

然后获取该值并转换为:

 CInt(Decimal.Truncate(((value+ 9 - 1) / 9))).

列代码是:

 (value + 9) - (CInt(Decimal.Truncate(((value + 9 - 1) / 9))) * 9). 

我需要将它变成一个内联Select语句,我可以从Web服务调用到Oracle服务器,我没有任何方法可以创建任何数据库端。现在我所做的是调用结果记录集添加几列并循环结果并添加值。我知道必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

此Oracle查询返回行和列位置:

select storage_address, 
    floor((to_number(substr(storage_address, 13, 3))-1)/9)+1 rowposition,
    mod(to_number(substr(storage_address, 13, 3))-1, 9)+1 colpostion
  from t

以下是SQLFiddle,其中包含测试值。