簡體   English   中英

如何在表格中的列中插入不同類型的值?

[英]How do I insert values of different type to columns in my table?

問題標題可能聽起來很荒謬,但我會用下面的示例表解釋我想做什么:

+------------+------------+----------------+----------+-------------------------+
|  recvtime  | entitytype |    attrname    | attrtype |        attrvalue        |
+------------+------------+----------------+----------+-------------------------+
| 2019-05-27 | Noise      | measurand      | Number   | 51.7                    |
| 2019-05-27 | Noise      | sonometerClass | Text     | 1                       |
| 2019-05-27 | Noise      | name           | Text     | City Centre             |
| 2019-05-27 | Noise      | longitude      | Number   | -8.65915                |
| 2019-05-27 | Noise      | latitude       | Number   | 41.1591                 |
| 2019-05-27 | Noise      | dateObserved   | DateTime | 2016-05-24T18:38:15.00Z |
+------------+------------+----------------+----------+-------------------------+

現在想要僅向attrnameattrvalue列插入更多值,其中值對應於以下內容:

+----------------+-------------------------+
|    attrname    |        attrvalue        |
+----------------+-------------------------+
| measurand      | 38.7                    |
| sonometerClass | 2                       |
| name           | London Street           |
| longitude      | -8.603257               |
| latitude       | 41.183778               |
| dateObserved   | 2016-05-24T18:38:15.00Z |
+----------------+-------------------------+

我如何在SQL中實現這一點? 我真的不介意保留所有其他列的值(即重復它們的值)。

編輯

雖然我承認Gordon Linoff的答案,但它不能解決我的問題,因為這些值實際上是從表單的csv文件中讀取的:

measurand,sonometerClass,name,longitude,latitude,dateObserved
38.7,2,London Street,-8.603257,41.183778,2016-05-24T18:38:15.00Z
90.4,1,Hospital de S. Joao,-8.603257,41.183778,2014-07-12T6:18:15.00Z
59.3,0,City Campus,-8.594866,41.178031,2014-08-12T16:10:10.00Z
64.5,1,ABC Beach,-8.607085,41.15001,2015-10-11T16:10:10.00Z

這些值不是直接來自用戶輸入,而是從csv文件中讀取,其形式如上所述。

EDIT 2:

我知道我會使用postgres copy命令,實際上我在python腳本中使用了postgres copy_from 我的特定問題是從使得用於每一行的CSV文件讀取的值csv文件,值插入到attrvalue與對應的列attrname更新,因此:

For line1: 38.7,2,London Street,-8.603257,41.183778,2016-05-24T18:38:15.00Z

我得到以下對應( attrname設置為like):

measurand = 38.7
sonometerClass = 2
name = London Street
longitude = -8.603257
latitude = 41.183778
dateObserved = 2016-05-24T18:38:15.00Z

同樣的,

For line2: 90.4,1,Hospital de S. Joao,-8.603257,41.183778,2014-07-12T6:18:15.00Z

我得到以下內容:

measurand = 90.4
sonometerClass = 1
name = Hospital de S. Joao
longitude = -8.603257
latitude = 41.183778
dateObserved = 2014-07-12T6:18:15.00Z

所有其他列保持原樣。

我的第一個猜測是:

insert into t (recvtime, entitytype, attrname, attrtype,       attrvalue)
    values ('2019-05-27', 'Noise', 'measurand', 'number', '38.7'),
           ('2019-05-27', 'Noise', 'sonometerClass', 'text', '2'),
           ('2019-05-27', 'Noise', 'name', 'text', 'London Street'),
           ('2019-05-27', 'Noise', 'longitude', 'number', '-8.603257'),
           ('2019-05-27', 'Noise', 'latitude', 'number', '41.183778'),
           ('2019-05-27', 'Noise', 'dateobserved', 'datetime', '2016-05-24T18:38:15.00Z');

您可以使用列特定查詢插入記錄,如下所示:insert into table_name(attrname,attrvalue)values(“dateObserved”,“2016-05-24T18:38:15.00Z”);

在這里,將值替換為您要插入的預期值。 注意:確保在此表中沒有主鍵時執行此查詢。 如果任何列上都存在主鍵,我們還需要使用唯一值添加該列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM