[英]Split a string into sub-strings starting from “ ] ” ending with “As”
我使用以下查詢從Microsoft SQL Server 2008 R2中的存儲過程中提取了一個字符串: EXEC sp_helptext 'MyStoredProcedureName';
我需要將此字符串拆分為數組或子字符串,這些字符串或子字符串以括號“]”結尾,並以單詞“ As”結尾。 我必須在(fieldsArray)中保存所有以“ @”開頭的所有字段,並在(typeArray)中的空格之后保存這些字段的類型,然后將它們以以下格式輸出到node.js文件中:
InvoiceNo: {
type: DataType.String(255),
},
這是提取的字符串:
CREATE PROCEDURE [dbo].[MyStoredProcedureName]
@InvoiceNo int
,@TransDate datetime
,@CustomerID bigint
,@CurrencyID bigint
,@SalesInvoiceTypeID bigint
,@DiscountAmount nvarchar(50)
,@DetailXml ntext
,@TotalAll float
,@TotalBefore float
,@TaxAmount float
,@OtherExpenses float
,@OutVouchersNo nvarchar(1000)
,@Notes nvarchar(1000)
,@TotalWiegts float
,@VoucherDefID bigint
,@SalesmanID bigint
,@IsSale bit
AS
BEGIN TRANSACTION
編輯:我使用了另一個查詢,而不是上面提到的。 現在,我有一個包含查詢結果的對象,該查詢結果是字段名稱,每行分別在單獨的行中。 我現在需要做的是將此對象分隔為字符串數組,以便可以分別處理每個名稱。 對象“名稱”包含我使用的查詢結果:
Names = await sequelize.query(namesQuery);
這是console.log(Names);
的輸出console.log(Names);
[ [ { '': 'InvoiceNo' },
{ '': 'TransDate' },
{ '': 'CustomerID' },
{ '': 'CurrencyID' },
{ '': 'SalesInvoiceTypeID' },
{ '': 'DiscountAmount' },
我嘗試了Names.split
但收到錯誤消息“ Names.split不是函數”
您可以查詢Sys.Parameters
表:
SELECT Substring(Parameters.Name,2,255) + ': { type: DataType.' +
CASE types.Name
WHEN 'varchar' THEN 'String(' + CAST(Parameters.Max_Length As Varchar)
WHEN 'int' THEN 'Int'
ELSE 'COMPLETE THE REST OF THIS yourself.....'
END + '),},'
FROM Sys.Parameters
INNER JOIN sys.procedures on parameters.object_id = procedures.object_id
INNER JOIN sys.types on parameters.system_type_id = types.system_type_id AND parameters.user_type_id = types.user_type_id
Where procedures.name = 'MyStoredProcedureName'
如果您認為符號@
僅用於標識字段名的開頭,則可以如下使用正則表達式:
let result = {}
str.match(/@\w+ [a-z]+/g)
.map(s => s.match(/@(\w+) ([a-z]+)/))
.forEach(r => {
let fieldName = r[1]
let type = r[2]
result[fieldName] = { type }
})
console.log(JSON.stringify(result, undefined, 2))
這將輸出
{
"InvoiceNo": {
"type": "int"
},
"TransDate": {
"type": "datetime"
},
...
}
我猜只有正則表達式可以達到相同的目的,但是代碼更容易理解:
match
捕獲所有@FieldName type
字符串 match
捕獲每個FieldName
和type
FieldName
和content { type: "type" }
成員填充對象result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.